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