Rでテキストからキーワードを抽出する方法とは?

テキストからのキーワード抽出に使用されるコード・スニペットをハイライトしたRインターフェースを示す画像。
テキストからのキーワード抽出に使用されるコード・スニペットをハイライトしたRインターフェースを示す画像。

Eskritor 2023-07-06

キーワード抽出とは?

キーワード抽出は、テキスト解析の手法を用いて、テキストから最も使用されている単語や重要な表現を自動的に抽出するものです。 これは、テキストの内容を要約し、議論された主要なトピックを認識するのに役立ち、 市場 調査、感情分析、その他の種類のデータ分析に役立ちます。 この技術は、文の埋め込みを活用し、大規模なデータセットをリアルタイムで分析することができます。

自然言語処理(NLP)(コンピュータサイエンスの一分野)を用いた機械学習人工知能(AI)は、人間の言葉を分解して、機械が理解・分析できるようにするものです。 キーワード抽出により、受信したアンケート回答へのタグ付けや、緊急の顧客問い合わせへの対応など、ワークフローを自動化します。 この技術は、テキストとその中に含まれる単語に関する言語的・意味的情報を利用するものです。 テキスト中の最も関連性の高いキーワードを抽出するために、さまざまな機械学習アルゴリズムやテクニックがあります。

なぜキーワード抽出が重要なのか?

キーワード抽出とキーフレーズ抽出は、いくつかの理由で重要です:

  1. 検索エンジン最適化(SEO) :キーワード抽出は、文書内の最も重要な単語やフレーズを特定するのに役立ち、検索エンジン向けにウェブサイトのコンテンツを最適化するために使用できます。
  2. テキストの要約:キーワード抽出は、テキストの主要なテーマを表す最も重要な単語やフレーズを特定することによって、文書を要約するために使用することができます。
  3. テキストの分類:キーワード抽出は、テキスト文書を、その中に含まれるキーワードに基づいて異なるカテゴリーに分類するために使用することができます。 センチメント分析などのアプリケーションに有効です。
  4. 情報検索です:キーワード抽出は、ユーザーの検索クエリにマッチする関連キーワードを特定することで、情報検索システムの精度を向上させるために使用できます。

Rでキーワード抽出を行うには?

ここでは、キーワード抽出のテクニックとその使用例を紹介します:

  • 名詞を特定するために品詞タグ付けを行い、キーワードを見つける。
  • コロケーションと共起語をもとにキーワードを検索します。
  • Textrankアルゴリズムに基づくキーワードの検索
  • RAKE(高速自動キーワード抽出)に基づくキーワードの検索。
  • 依存関係解析の結果をもとにキーワードを見つける(文章の主語を取得する)。
テキストからキーワードを抽出する

名詞を抽出する

キーワードを見つけるための簡単な方法は、名詞を見ることです。 udpipeパッケージを使用してテキストをアノテーションした場合、各用語には品詞タグが付与されるため:

コードです:

stats <- subset(x, upos %in% "NOUN") 
stats <- txt_freq(x = stats$lemma) 
library(lattice) 
stats$key <- factor(stats$key, levels = rev(stats$key)) 
barchart(key ~ freq, data = head(stats, 30), col = "cadetblue", main = "Most occurring nouns", xlab = "Freq")

コロケーションと共起語

コロケーション(互いに続く単語)、各文章内の単語の共起、または互いに近接する単語の共起のいずれかを見て、複数の単語表現を取得します。

コードです:

Collocation (words following one another)

stats <- keywords_collocation(x = x,
term = "token", group = c("doc_id", "paragraph_id", "sentence_id"),
ngram_max = 4)

Co-occurrences: How frequent do words occur in the same sentence, in this case only nouns or adjectives

stats <- cooccurrence(x = subset(x, upos %in% c("NOUN", "ADJ")),
term = "lemma", group = c("doc_id", "paragraph_id", "sentence_id"))

## Co-occurrences: How frequent do words follow one another

stats <- cooccurrence(x = x$lemma,
relevant = x$upos %in% c("NOUN", "ADJ"))

## Co-occurrences: How frequent do words follow one another even if we would skip 2 words in between

stats <- cooccurrence(x = x$lemma,
relevant = x$upos %in% c("NOUN", "ADJ"), skipgram = 2)

テキストランク(Googleページランク順のワードネットワーク)

Textrankもキーワードの抽出方法の一つです。 textrank Rパッケージは、Textrankアルゴリズムを実装しています。 Textrankアルゴリズムは、テキストの要約とキーワードの抽出を可能にします。 単語ネットワークを構築するために、アルゴリズムは単語が互いに続いているかどうかをチェックする。 Google Pagerank」アルゴリズムで、関連する単語を抽出している。 関連する単語が互いに続くと結合してキーワードになります。 TextRankは、グラフベースのアプローチであるため、原文に由来するものではありません。

コードです:

stats <- textrank_keywords(x$lemma, relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 8, sep = " ") 
stats <- subset(stats$keywords, ngram > 1 & freq >= 5) library(wordcloud) wordcloud(words = stats$keyword, freq = stats$freq)

迅速な自動キーワード抽出:RAKE

RAKEは、Rapid Automatic Keyword Extractionの頭文字をとった、次の基本的なアルゴリズムです。 RAKEは、自然言語処理におけるドメインに依存しないキーワード抽出アルゴリズムです。

  1. キーワード候補の一部である各単語のスコアの算出は、以下の方法で行います。
    • キーワード候補の単語のうち、各単語が何回出現しているか、他の単語と何回共起しているかを調べます。
    • 各単語は、単語度(他の単語との共起回数)と単語頻度の比であるスコアを取得する
  2. キーワード候補のRAKEスコアは、キーワード候補を定義する各単語のスコアを合計することで算出されます。

コードです:

stats <- keywords_rake(x = x, term = "token", group = c("doc_id", "paragraph_id", "sentence_id"), relevant = x$upos %in% c("NOUN", "ADJ"), ngram_max = 4) 
head(subset(stats, freq > 3)) 

係り受け解析の出力を使って、名詞の主語とそれの形容詞を取得する

udpipeでアノテーションを実行した場合、 dep_rel フィールドは単語同士の関連性を示す。 トークンは、 token_idと head_token_idを 使用して親と関連付けられます。 dep_rel フィールドは、単語が互いにどのようにリンクしているかを示す。 関係の種類は、http://universaldependencies.org/u/dep/index.html。

コードです:

stats <- merge(x, x, by.x = c("doc_id", "paragraph_id", "sentence_id", "head_token_id"), by.y = c("doc_id", "paragraph_id", "sentence_id", "token_id"), all.x = TRUE, all.y = FALSE, suffixes = c("", "_parent"), sort = FALSE) 
stats <- subset(stats, dep_rel %in% "nsubj" & upos %in% c("NOUN") & upos_parent %in% c("ADJ")) 
stats$term <- paste(stats$lemma_parent, stats$lemma, sep = " ") 
stats <- txt_freq(stats$term) 
library(wordcloud) 
wordcloud(words = stats$key, freq = stats$freq, min.freq = 3, max.words = 100, random.order = FALSE, colors = brewer.pal(6, "Dark2"))

テキストマイニングとは?

Rによるテキストマイニングとは、Rプログラミング言語と関連するライブラリやパッケージを使用して、テキストデータを分析し、洞察を抽出するプロセスを指します。 テキストマイニングには、データのクリーニングや前処理、特徴抽出、統計モデリング、可視化など、いくつかのステップがあります。
tm パッケージは、テキストデータの読み込み、データのクリーニングや前処理、テキストデータの分析によく使われるドキュメントタームマトリックスの作成などの関数を提供します。 tidytext パッケージは、テキストデータを整頓されたデータフレームに変換するツールを提供します。
テキストマイニングの一般的なタスクには、感情分析、トピックモデリング、文書クラスタリング、テキスト分類などがある。 統計学や機械学習の技術を応用して、テキストデータ内のパターンや関係性を特定する作業です。

キーワード抽出APIは、開発者があらかじめ構築されたアルゴリズムや機械学習モデルを用いて、テキストからキーワードやキーフレーズを抽出することを可能にするソフトウェアインターフェースです。 これらのAPIは、開発者が独自のモデルを構築しトレーニングすることなく、キーワード抽出のプロセスを自動化するための使いやすく拡張性の高いソリューションを提供します。

Rは 、統計計算、データ解析、グラフィックスのためのオープンソースのプログラミング言語およびソフトウェア環境です。 Rは、統計モデリング、データ可視化、機械学習、データマイニングなどのタスクのために、学術、研究、産業で広く利用されています。 Pythonや C++など 他のプログラミング言語とのインターフェースも備えています。 GitHubにあるオンラインチュートリアルでより詳細な情報を確認することができます。

投稿を共有

AIライター

img

Eskritor

AI 生成コンテンツの作成