tag:crieit.net,2005:https://crieit.net/tags/mecab/feed 「mecab」の記事 - Crieit Crieitでタグ「mecab」に投稿された最近の記事 2021-04-15T21:21:40+09:00 https://crieit.net/tags/mecab/feed tag:crieit.net,2005:PublicArticle/16850 2021-04-15T21:19:45+09:00 2021-04-15T21:21:40+09:00 https://crieit.net/posts/KeyBERT KeyBERTでキーフレーズ抽出を試してみる <p>最近キーフレーズ抽出に興味がありいろいろと調べていたら、BERT版のキーフレーズ抽出パッケージがあったので試してみた。ちなみにキーフレーズ抽出とは、「文章からその主題を良く表現している句を抽出する技術」のこと。<br /> 環境は、Docker for Mac を想定。</p> <h1 id="環境設定"><a href="#%E7%92%B0%E5%A2%83%E8%A8%AD%E5%AE%9A">環境設定</a></h1> <h2 id="Docker for Macのメモリ制限解放"><a href="#Docker+for+Mac%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E5%88%B6%E9%99%90%E8%A7%A3%E6%94%BE">Docker for Macのメモリ制限解放</a></h2> <p>Decktopにある<code>Preference</code> -> <code>Advance</code> でMemoryの上限を調整する。KeyBERTをインストールするとPytorchをインストールしようとするが、Dockerのデフォルト設定のままだとメモリ不足でインストールに失敗する。なので、設定を変更してメモリ制限を解除する。今回は12Gに設定した。</p> <h2 id="KeyBERTのインストール"><a href="#KeyBERT%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">KeyBERTのインストール</a></h2> <pre><code class="python">pip install keybert </code></pre> <h2 id="MeCabのインストール"><a href="#MeCab%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">MeCabのインストール</a></h2> <p>KeyBERTは日本語の分かち書きに対応していないため、MeCabを利用する。</p> <pre><code class="python">pip install mecab-python3 pip install unidic-lite </code></pre> <h1 id="コード"><a href="#%E3%82%B3%E3%83%BC%E3%83%89">コード</a></h1> <p>今回は、Wikipediaのディズニーランドの記事を使ってみる。</p> <pre><code class="python">from keybert import KeyBERT import MeCab doc1 = """ 東京ディズニーランド(とうきょうディズニーランド、英称:Tokyo Disneyland、略称:TDL)は、 千葉県浦安市舞浜にあるディズニーリゾートを形成する日本のディズニーパーク。 年間来場者数は日本最大の約1,800万人で、世界のテーマパーク・アミューズメントパークの中でも、 フロリダ州のウォルト・ディズニー・ワールド・リゾートのマジック・キングダム、カリフォルニア州の ディズニーランド・リゾートのディズニーランド・パークに次いで世界3位の規模を誇る[1]。 オリエンタルランドがウォルト・ディズニー・カンパニーとのライセンス契約のもと運営している[3]。 """ # MeCabで分かち書き words = MeCab.Tagger("-Owakati").parse(doc1) model = KeyBERT('distilbert-base-nli-mean-tokens') print(model.extract_keywords(words, top_n = 10, keyphrase_ngram_range=(1, 1))) </code></pre> <h1 id="結果"><a href="#%E7%B5%90%E6%9E%9C">結果</a></h1> <p>キーフレーズとして「ディズニーランド」が上位に上がってくると思いきや、結果は8番目だった。</p> <pre><code>[('アミューズメント', 0.5486), ('オリエンタル', 0.534), ('ライセンス', 0.5144), ('マジック', 0.4829), ('キングダム', 0.4651), ('フロリダ', 0.4469), ('カンパニー', 0.44), ('日本', 0.4295), ('ディズニー', 0.4252), ('ランド', 0.4068)] </code></pre> <h1 id="ちょっとだけ追加検証"><a href="#%E3%81%A1%E3%82%87%E3%81%A3%E3%81%A8%E3%81%A0%E3%81%91%E8%BF%BD%E5%8A%A0%E6%A4%9C%E8%A8%BC">ちょっとだけ追加検証</a></h1> <p>ちなみに、下記の文章(概要の部分)を追加するとどうなるかというと。。。</p> <pre><code class="python">doc2 = """ 誘致当時の経緯から東京ディズニーシーと共に米国ディズニーグループによる直営ではなく、 日本企業の 株式会社オリエンタルランド が米国ディズニーからのライセンス契約により運営している。 なお、東京ディズニーリゾートで販売されているキャラクターの著作権や版権ビジネスはすべてウォルト・ディズニー・ジャパンが、 アトラクションやショーの企画に関しては、米国ディズニー・パークス・エクスペリエンス・プロダクツおよび米 国ディズニーの子会社であるウォルト・ディズニー・アトラクションズ・ジャパンが担当している。 """ </code></pre> <h2 id="結果2"><a href="#%E7%B5%90%E6%9E%9C2">結果2</a></h2> <p>「ディズニー」が消えてしまった。「エクスペリエンス」って1回して出てきていないんだけど。。</p> <pre><code>[('エクスペリエンス', 0.5799), ('アトラクション', 0.5603), ('アミューズメント', 0.5486), ('オリエンタル', 0.534), ('キャラクター', 0.5154), ('ライセンス', 0.5144), ('プロダクツ', 0.494), ('マジック', 0.4829), ('ジャパン', 0.4752), ('キングダム', 0.4651)] </code></pre> skybee8