TextRankアルゴリズムを使用した自動テキスト要約

TextRankアルゴリズムを使用した自動テキスト要約

【51CTO.com クイック翻訳】1. はじめに

テキスト要約は、自然言語処理 (NLP) の分野におけるアプリケーションの 1 つであり、私たちの生活に大きな影響を与えることは間違いありません。デジタル メディアと出版業界は成長を続けていますが、記事や文書、書籍全体を読んで、それが役に立つかどうかを判断する時間がある人はいるでしょうか? ありがたいことに、テキスト要約テクノロジーはすでに存在しています。

inshorts というモバイル アプリを使用したことがありますか? これは、ニュース記事を 60 語の要約に変換できる非常にクリエイティブなニュース アプリです。この記事で学ぶのはまさにこれ、つまり自動テキスト要約です。

自動テキスト要約は、自然言語処理 (NLP) の分野における最も困難かつ興味深い問題の 1 つです。これは、書籍、ニュース記事、ブログ投稿、研究論文、電子メール、ツイートなどの複数のテキスト ソースから簡潔で意味のあるテキスト要約を生成するプロセスです。

私たちが直面するテキストデータの量が膨大であるため、最近では自動テキスト要約システムの需要が驚異的に高まっています。

この記事では、テキスト要約の分野を探り、TextRank アルゴリズムの仕組みを理解し、Python でアルゴリズムを実装します。

2. テキスト要約方法

自動テキスト要約は 1950 年代から人々の注目を集めてきました。 1950 年代後半に Hans Peter Luhn によって発表された「文学要約の自動作成」と題する研究論文では、単語の頻度や語句の頻度などの特徴を使用して、テキストから重要な文を抽出し、記事を要約しました。

1960 年代後半に Harold P Edmundson が実施したもう 1 つの重要な研究では、文にキーワードが含まれているかどうか、タイトルに含まれる単語が本文に出現しているかどうか、本文内での文の位置などの方法を使用して重要な文を抽出し、テキスト要約を生成しました。それ以来、自動テキスト要約の分野における課題に対処するために、多くの重要かつ刺激的な研究が発表されてきました。

テキスト要約は、抽出要約と抽象要約の 2 つのカテゴリに大別できます。

  1. 抽出要約: これらの方法は、テキストからフレーズや文などの複数の部分を抽出し、それらを積み重ねて要約を作成します。したがって、抽出方法では正しい要約文を識別することが重要です。
  2. 抽象的要約: これらの方法では、高度な NLP 技術を使用して新しい要約を生成します。これらの要約の一部は、元のテキストには記載されていない場合もあります。

この記事では、抽出要約技術に焦点を当てます。

3. TextRankアルゴリズムを理解する

TextRank アルゴリズムの使用を開始する前に、別のアルゴリズムである PageRank アルゴリズムを理解する必要があります。実際、TextRank アルゴリズムはこれに基づいて開発されました。PageRank は主に、Web 検索結果で Web ページをランク付けするために使用されます。例を参考にして、このアルゴリズムの基本を簡単に理解してみましょう。

3.1. PageRankアルゴリズム

w1、w2、w3、w4 という 4 つの Web ページがあるとします。これらのページには他のページへのリンクが含まれています。ただし、これらのページの中には、他のページへのリンクがないものもあります。このようなページは、ダングリング ページと呼ばれます。

  • ウェブページw1にはウェブページw2とw4へのリンクがあります。
  • ウェブページw2にはウェブページw3とw1へのリンクがあります。
  • ページ w4 にはページ w1 へのリンクがあります
  • ページ w3 には他のページへのリンクがないため、ぶら下がりページになります。

これらのページをランク付けするには、PageRank スコアと呼ばれるスコアを計算する必要があります。このスコアは、ユーザーがそのページにアクセスする確率です。 ユーザーがあるページから別のページに移動する確率を取得するには、n 行と n 列 (n は Web ページの数) を持つ正方行列 M を作成します。

マトリックスの各要素は、ユーザーがある Web ページから別の Web ページに移動する確率を表します。たとえば、下の図の強調表示されたセルは、Web ページ w1 から Web ページ w2 にジャンプする確率を表しています。

Webページジャンプ確率の初期化方法は次のとおりです。

  1. ページiからページjにジャンプする確率M[i][j]は、1/(ページwi内の重複しないリンクの総数)で初期化されます。
  2. ページiとjの間にリンクがない場合、確率は0に初期化されます。
  3. ユーザーがダングルページにアクセスした場合、他のページにジャンプする確率は同じであると想定されます。したがって、M[i][j]は1 / (ページ総数)で初期化されます。

したがって、この場合、行列 M は次のように初期化されます。

マトリックス内の値は継続的に反復的に更新され、最適な Web ページのランキングが実行されます。

4. TextRankアルゴリズム

PageRank アルゴリズムの基本的な考え方を理解した後、TextRank アルゴリズムを理解しましょう。 2 つのアルゴリズムの関係を次に示します。

  • ウェブページではなく文章を勉強します。
  • 2つの文の類似性は、ウェブページ間のジャンプ確率として理解できる。
  • 文間の類似度スコアは、PageRank アルゴリズムの正方行列 M に似た正方行列に格納されます。

TextRank アルゴリズムは、抽出型の教師なしテキスト要約手法です。 TextRank アルゴリズムのフローを見てみましょう。

  1. 最初のステップは、記事に含まれるすべてのテキストを取得することです。
  2. 次に、テキストを個々の文に分割します。
  3. 次のステップは、各文のベクトル表現を見つけることです。
  4. 次に、文ベクトル間の類似度が計算され、行列に格納されます。 5. 次に、類似度マトリックスをグラフに変換します。グラフの頂点は文を表し、辺は文間の類似度を表します。これは、後続の文のランキングの計算に使用されます。
  5. ***、最終要約には上位 *** の文が含まれます。 では、これ以上何も言わずに、Jupyter Notebook を起動してコーディングを始めましょう! 注: グラフ理論について詳しく知りたい場合は、この記事を確認することをお勧めします。

5. 問題の説明

私はテニス愛好家として、テニスに関するオンライン記事をできるだけ多く読んで、テニスの最新の出来事を常に把握するようにしています。しかし、それはかなり難しい作業であることがわかりました。オンライン上のリソースは非常に多く、私の時間は非常に限られていました。

そこで私は、複数の記事をスキャンして記事の要約を提供できるシステムを設計することにしました。これをどうやって行うのでしょうか? このチュートリアルではその方法を説明します。テキストの簡潔で明確な要約を作成することを目的として、テニスのテキストのデータセットに TextRank アルゴリズムを適用します。

これは実際には単一ドメインの複数ドキュメントの要約タスクであることに注意してください。つまり、複数の記事を入力として受け取り、単一のターゲット トピックの要約を生成します。 この記事では、マルチドメインのテキスト要約については取り上げませんが、独自に学習することができます。

使用するデータセットはここからダウンロードできます。

6. TextRankアルゴリズムの実装

Jupyter Notebook を開いて、今学んだことを実装してみましょう。

6.1. 必要なライブラリをインポートする

まず、使用するライブラリをいくつかインポートする必要があります。

  1. numpyをnpとしてインポートする 
  2. pandasをpdとしてインポートする 
  3. nltk をインポートする 
  4. nltk.download( 'punkt' ) # 1回の実行 
  5. 輸入再

6.2. データの読み取り

次に、データセットを読み込む必要があります。前のセクションでデータセットのダウンロード リンクを提供しました (見逃した場合に備えて)。

  1. df = pd.read_csv( "テニス記事v4.csv" )

データの表示

データがどのようになっているか簡単に見てみましょう。

  1. df.head()

データセットには、「article_id」、「article_text」、「source」の 3 つの列が含まれています。最も興味深いのは、「article_text」列です。ここには記事のテキストが含まれています。変数の値をいくつか出力して、それがどのように見えるかを確認することができます。

  1. df[ '記事本文' ][0]

出力:

  1. 「マリア・シャラポワにはWTAツアーテニス選手として基本的に友人がいない。このロシア人選手はそれについて公然と話すこと何の問題もなく  最近のインタビュー彼女はこう語った。「私はあまり感情隠したりはしません。これが私の仕事だということは、みんなが分かっていると思いますコートにいるとき、あるいはコートでプレーしているとき競争であり、ロッカールームいる人でネットの向こうにいる人でも、誰一人として打ち負かしたいと思っています...」

  1. df[ '記事本文' ][1]

出力:

  1. スイス、バーゼル(AP通信)ロジャー・フェデラーは土曜日、第7シードのダニール・メドベージェフを6-1、6-4で破り、キャリア14回目のスイスインドア決勝に進出した地元大会9度目優勝、通算99度目の優勝を目指すフェデラーは、日曜日93位のマリウス・コピルと対戦する。フェデラーは20位のメドベージェフを圧倒し 5-1再びサービスブレークするマッチポイントのチャンスを得た...

ここで、2 つのオプションがあります。各記事の要約を個別に生成するか、すべての記事の単一の要約を生成するかです。問題の要件を考慮して、後者を実行します。

6.4. テキストを文に分割する

次のステップは、テキストを個々の文に分割することです。nltk ライブラリの sent_tokenize() 関数を使用できます。

  1. nltk.tokenizeからsent_tokenize をインポートします 
  2. 文 = []  
  3. df[ 'article_text' ]内のsの場合:  
  4. sentences.append(送信トークン化)  
  5. sentences = [y for x in sentences for y in x] # リストを平坦化する

文のリストのいくつかの要素を出力します。

  1. 文[:5]

出力:

  1. [ 「マリア・シャラポワには、WTAツアーのテニス選手として基本的に友人がいない。」 , 「このロシア人選手は、このことについてオープンに話すことに何の問題もなく、最近のインタビューでこう語っている。『私はあまり感情を隠したりはしません。』 , 「これが私の仕事だということは、みんなが知っていると思います。」 , 「コートにいるとき、またはコートでプレーしているとき、私は競争者であり、ロッカールームにいる人であろうとネットの向こうにいる人であろうと、すべての人に勝ちたいと思っています。だから、天気について会話を始めたり、数分後にテニスの試合に勝たなければならないことを知ったりするようなタイプではありません。」 , 「私はかなり競争心の強い女の子です。」 ]

6.5. GloVe単語ベクターをダウンロードする

GloVe 単語ベクトルは単語のベクトル表現です。これらの単語ベクトルは、後で文ベクトルを作成するために使用されます。 Bag-of-Words または TF-IDF 方式を使用して文の特徴を作成することもできますが、これらの方法では単語の順序が無視されます (また、特徴の数は通常非常に多くなります)。

ここで入手できる事前トレーニング済みの Wikipedia 2014 + Gigaword 5 GloVe ベクトルを使用します。これらの単語ベクトルのサイズは 822 MB であることに注意してください。

  1. !wget http://nlp.stanford.edu/data/glove.6B.zip  
  2. !glove*.zip を解凍します

単語ベクトルを抽出する必要があります:

  1. # 単語ベクトルの抽出 
  2. 単語埋め込み = {}  
  3. f = open ( 'glove.6B.100d.txt' 、エンコーディング = 'utf-8' )  
  4. fの場合:  
  5. = line.split()  
  6. 単語 =[0]  
  7. coefs = np.asarray([1:], dtype = 'float32' )  
  8. word_embeddings[単語] = 係数 
  9. f.close ()関数 
  10. len(単語埋め込み)

出力:

  1. 400000

これで、辞書内の 400,000 語すべてに対する単語ベクトルが揃いました。

6.6. テキストの前処理

テキスト データをできるだけノイズのないものにすることは常に良い習慣です。それでは、基本的なテキストのクリーンアップをしてみましょう。

  1. # 句読点、数字特殊文字を削除します 
  2. clean_sentences = pd.Series(sentences) .str.replace ( "[^a-zA-Z]" , " " )  
  3. # アルファベットを小文字にする 
  4. clean_sentences = [ clean_sentences内のss.lower () ]

ストップワードを削除します (ストップワードとは、英語の am、the、of、in など、言語で最もよく使用される単語の一部です)。 nltkstopwords をまだダウンロードしていない場合は、次のコードを実行してください。

  1. nltk.download( 'ストップワード' )

次にストップワード リストをインポートします。

  1. nltk.corpusからストップワードをインポート 
  2. stop_words = stopwords.words( '英語' )

データセットからストップワードを削除する関数を定義します。

  1. 関数 ストップワードを削除する 
  2. def remove_stopwords(sen):  
  3. sen_new = " " . join ([i for i in sen if i not   stop_words])  
  4. sen_newを返す 
  5. #文章からストップワードを削除する 
  6. clean_sentences = [remove_stopwords(r.split()) rclean_sentences]

GloVe 単語ベクトルの助けを借りて、clean_sentences を使用してデータ内の文のベクトルを作成します。

6.7. 文のベクトル表現

  1. # 単語ベクトルの抽出 
  2. 単語埋め込み = {}  
  3. f = open ( 'glove.6B.100d.txt' 、エンコーディング = 'utf-8' )  
  4. fの場合:  
  5. = line.split()  
  6. 単語 =[0]  
  7. coefs = np.asarray([1:], dtype = 'float32' )  
  8. word_embeddings[単語] = 係数 
  9. f.close ()関数

それでは、文章のベクトル表現を作成しましょう。まず、文を構成するすべての単語のベクトル (各ベクトルは 100 次元) を取得し、次にこれらのベクトルの平均を取って文のベクトルを取得します。

  1. 文ベクトル = []  
  2. clean_sentences内のiについて:  
  3. len(i) != 0の場合:  
  4. v =合計([word_embeddings.get(w, np.zeros((100,)))、 w の場合、 i.split ()])/(len(i.split())+0.001)  
  5. それ以外  
  6. v = np.zeros((100,))  
  7. sentence_vectors.append(v)

6.8. 類似度マトリックスの準備

次のステップは、文間の類似度を計算することです。コサイン類似度法を使用して、文ベクトル間の類似度を計算します。

まず、次元 (n * n) のゼロ行列を定義しましょう。この行列は、文のコサイン類似度スコアを使用して初期化されます。ここで、n は文の数です。

  1. # 類似度マトリックス 
  2. sim_mat = np.zeros([len(文), len(文)])  
  3. sklearn.metrics.pairwiseからcosine_similarity をインポートします 
  4. i が範囲(len(文))内にある場合:  
  5. jrange(len(sentences))内にある場合:  
  6. i != jの場合:  
  7. sim_mat[i][j] = cosine_similarity(sentence_vectors[i].reshape(1,100), sentence_vectors[j].reshape(1,100))[0,0]

6.9. PageRankアルゴリズムの適用

次のステップに進む前に、類似度マトリックスを、頂点が文を表し、辺が文間の類似度スコアを表すグラフに変換する必要があります。このグラフに PageRank アルゴリズムを適用して、文章をランク付けします。

  1. networkxをnxとしてインポートする 
  2. nx_graph = nx.from_numpy_array(sim_mat)  
  3. スコア = nx.pagerank(nx_graph)

6.10. 要約抽出

***、生成された要約から上位 N 個の文を抽出します。

  1. ランク付けされた文 = ソート済み(((スコア[i],s)  
  2. i,s in enumerate(sentences)の場合)、reverse= True )  
  3. #要約として上位10文を抽出 
  4. iが範囲(10)内にある場合:  
  5. print(ランク付けされた文[i][1])

出力:

  1. コートにいるとき、あるいはコートでプレーしているとき競争であり、ロッカールームにいる人であろうネットの向こうにいる人であろうと、すべての人に勝ちたいと思っています。だから、天気について会話を始めたりテニスの試合勝たなければならないとわかっているような人間はありません
  2. 主要選手たちは、 11月下旬大きな大会全豪オープン前の1月大会を組み合わせると、テニスが多すぎて休息が足りなくなると感じている。
  3. 日曜日の決勝ルーマニアの予選通過者マリウス・コピルと対戦するスイスインドアトーナメントで、世界ランキング3位の彼は決断下すための時間枠が信じられないほど短いことを考慮して辞退語った。   いかなる約束も。
  4. 「私がプレーしていたとき、選手たちと知り合うのに最適週は必ずしもトーナメント中ではなくフェドカップの週オリンピックの週だと感じました。
  5. 現在9位錦織勝て 次回ロンドン行われる8人制の大会への出場権獲得まで125ポイント以内 
  6. 彼は最初のブレークポイント利用して 近い 最初  2セット3-0とリードし そして、最初マッチポイント勝利を確定させた。スペイン人は2セットアンダーソンのサービスを2度ブレークしたが、最終セットでは南アフリカのサービスに対してもうチャンスはなかった
  7. 「また、現段階ではトレーニングよりも試合に出場した良いかもしれないという印象も持っていました
  8. 競争 セット 次回11月18日から24日までマドリード開催される決勝戦には18か国が出場する  今年は年間4回行われる伝統的なホームアンドアウェイ戦に代わるものである 何十年もの間
  9. フェデラーは今月初めに 上海ではデビスカップに出場できる可能性がほとんどなかった。

このようにして、目的のテキスト要約結果が得られます。

7. 次は何ですか?

自動テキスト要約は研究のホットな話題であり、この記事ではその表面を少し触れただけです。今後は、ディープラーニングが重要な役割を果たす抽象的なテキスト要約技術を探求していきます。さらに、次の要約タスクも研究できます。

1. 問題別の要約タスク

  • マルチドメインテキスト要約
  • 単一文書の要約
  • クロスリンガルテキスト要約(入力は1つの言語で、要約は別の言語で生成されます)

2. 特定のアルゴリズムの概要タスク:

  • RNN と LSTM ネットワークを使用したテキスト要約
  • 強化学習を用いたテキスト要約
  • 生成的敵対ネットワーク (GAN) を使用したテキスト要約

8. 結論

この投稿が自動テキスト要約の概念を理解する助けになったことを願っています。さまざまなユースケースがあり、これを使用して非常に成功したアプリケーションが作られています。ビジネス上の理由であっても、単に知識を習得するためであっても、テキスト要約テクノロジーは、NLP 愛好家が知っておくべき手法です。

今後の投稿では、高度なテクニックを使用した抽象的なテキスト要約テクニックについて取り上げたいと思います。上記のコードは、この Github にあります。

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  2019年のAI開発の7つの分野

>>:  驚異的な言語 AI モデルが登場しました!物語を作り上げ、それを現実のように見せたり、質問と回答の要約を書いたりする

ブログ    
ブログ    
ブログ    

推薦する

人工知能を活用するための5つのベストプラクティス

生産性、精度、意思決定能力を向上させるために人工知能 (AI) を導入する手法は、さまざまな業界で広...

推薦システムにおけるランキング学習のための独自のアルゴリズム: Schiram ランキング

著者 | 王昊レビュー | Chonglou近年、推奨システムにおけるランク付け学習の応用は非常に稀...

...

9 つの SOTA GNN よりも強力です。 Google Brainが新しいグラフニューラルネットワークGKATを提案

[[413820]]グラフは、ソーシャル ネットワークからバイオインフォマティクス、ロボット工学の...

6000億元の市場シェア!今は無人採掘に最適な時期でしょうか?

2019年を振り返ると、無人商用車にとっては着陸の兆しがなく、資金調達がますます困難になり、最悪の...

Sogouの技術者が在宅勤務中にサーバーを誤操作し、誤って「マグニチュード12の地震警報」を発令した。

2月3日午前11時頃、捜狗入力法の一部のユーザーは、河北省興隆市でマグニチュード12の地震が発生し...

産業用ロボットとは何ですか?

産業用ロボットとは何ですか?工業生産で使用される産業用ロボットには、溶接ロボット、研削・研磨ロボット...

音声認識のクロスドメインおよびクロス言語移行の難しさを少しずつ軽減するにはどうすればよいでしょうか?

編集者注: ディープラーニングの継続的な発展により、音声認識技術は大幅に向上し、人々の日常生活に多く...

...

2018 年のネットワーク イノベーションを推進する 5 つのエンジン

IT 分野は革新を止めたことがなく、ネットワーク分野も例外ではありません。今日は、ネットワーク革新を...

ジャック・マーの野望がついに暴露される!たった今、アリの無人ホテルがオープンしました!ウェイターもレジ係もいない…また混乱

[[248958]]今週末、インターネットは再び混乱に陥った。ジャック・マーが2年かけて準備してきた...

2019年のAI業界の再編:疑似AI企業は淘汰される

起業プロジェクトの数、資金調達額、資金調達のスピードなど、AIは近年間違いなく注目の産業です。しかし...

...

マスク氏の元従業員が「宇宙工場」を建設し、スペースXのロケットで打ち上げられた新型コロナウイルス治療薬パクスロビドの製造を開始した。

人類が宇宙に建設した最初の工場がここにあります。しかも無人工場です!先週、この衛星はマスク氏のスペー...