Python 自然言語処理 (NLP) を使用して要約を作成する方法

Python 自然言語処理 (NLP) を使用して要約を作成する方法

たくさんのレポートを読まなければならないときに、それぞれのレポートを簡単に要約したいという状況に遭遇したことはありませんか?

要約は、21 世紀のデータ問題を解決するのに非常に役立つアプローチになりました。この記事では、Python で自然言語処理 (NLP) を使用して個人用テキスト サマライザーを作成する方法を説明します。

序文: 個人用テキスト要約ツールの作成は難しくありません。初心者でも作成できます。

テキスト要約とは何か

基本的には、全体の意味を失うことなく重要な情報を維持しながら正確な要約を作成する作業です。

要約には一般的に 2 つの種類があります。

  • 抽象的要約 >> 元のテキストから新しい文を生成します。
  • 抽出要約 >> 重要な文を特定し、それらの文を使用して要約を作成します。

どの要約方法を使用すべきでしょうか?

抽出要約を使用するのは、大規模な機械学習モデルをトレーニングするという(困難な)作業を行わなくても、この方法を多くのドキュメントに適用できるためです。

さらに、抽出要約は抽象要約よりも要約効果が優れています。これは、抽象要約では元のテキストから新しい文を生成する必要があり、重要な文を抽出するデータ駆動型方法よりも難しい方法だからです。

独自のテキスト要約ツールを作成する方法

ヒストグラムという単語を使用して文の重要度をランク付けし、要約を作成します。これの利点は、ドキュメントで使用するためにモデルをトレーニングする必要がないことです。

テキスト要約ワークフロー

私たちが従うワークフローは次のとおりです…

テキストをインポート >>>> テキストをクリーンアップして文に分割 >> ストップワードを削除 >> 単語ヒストグラムを作成 >> 文をランク付け >> 抽出要約用に上位 N 文を選択

(1)サンプルテキスト

私は、「Apple がアプリケーション開発のため AI スタートアップを 5,000 万ドルで買収」という見出しのニュース記事のテキストを使用しました。元のニュース記事は、こちらでご覧いただけます: https://analyticsindiamag.com/apple-acquires-ai-startup-for-50-million-to-advance-its-apps/

テキストファイルは Github からダウンロードすることもできます: https://github.com/louisteo9/personal-text-summarizer

(2)インポートライブラリ

  1. # 自然言語ツールキット (NLTK)
  2. nltk をインポートする
  3. nltk.download( 'ストップワード' )
  4.  
  5. # テキスト前処理のための正規表現
  6. 輸入再
  7.  
  8. # 最初の文を見つけるためのキューアルゴリズム
  9. heapq をインポートする
  10.  
  11. # 数値計算用のNumPy
  12. numpyをnpとしてインポートする
  13.  
  14. # データフレームを作成するための pandas
  15. pandasをpdとしてインポートする
  16.  
  17. # matplotlib プロット
  18. matplotlibからpyplotをpltとしてインポートします
  19. %matplotlib インライン

(3)テキストをインポートして前処理を行う

それを実行する方法はたくさんあります。ここでの目標は、モデルに取り込むことができるクリーンなテキストを作成することです。

  1. # テキストファイルを読み込む
  2.   open ( 'Apple_Acquires_AI_Startup.txt' , 'r' )f:として実行します。
  3. ファイルデータ = f.read ()

ここでは、正規表現を使用してテキストの前処理を実行します。私達はします

(A)参照番号をスペース(ある場合)に置き換えます。例:[1]、[10]、[20]、

(B) 1 つ以上のスペースを 1 つのスペースに置き換えます。

  1. テキスト = ファイルデータ
  2. # 存在する場合はスペースに置き換えます
  3. テキスト = re.sub(r '\[[0-9]*\]' , ' ' ,テキスト)
  4.  
  5. # 1つ以上のスペースを1つのスペースに置き換えます
  6. テキスト = re.sub(r '\s+' , ' ' ,テキスト)

次に、小文字(特殊文字、数字、余分なスペースなし)でクリーンなテキストを作成し、フレーズスコアの計算と単語形成ヒストグラムのために個々の単語に分割します。

きれいなテキストになるのは、アルゴリズムが「理解」と「理解」を 2 つの異なる単語として扱わないからです。

  1. # すべての大文字を小文字に変換します
  2. clean_text =テキスト.lower ()
  3.  
  4. # [a-zA-Z0-9]以外の文字をスペースに置き換える
  5. clean_text = re.sub(r '\W' , ' ' ,clean_text)
  6.  
  7. # 数字をスペースに置き換える
  8. clean_text = re.sub(r '\d' , ' ' ,clean_text)
  9.  
  10. # 1つ以上のスペースを1つのスペースに置き換えます
  11. clean_text = re.sub(r '\s+' , ' ' ,clean_text)

(4)テキストを文に分割する

テキストを文に分割するには、NLTK sent_tokenize メソッドを使用します。各文の重要性を評価し、各文を要約に含めるかどうかを決定します。

  1. 文章 = nltk.sent_tokenize(テキスト)

(5)ストップワードを削除する

ストップワードは、文にあまり意味を加えない英語の単語です。これらは文の意味を損なうことなく無視しても問題ありません。英語のストップワードを含むファイルをダウンロードしました

ここでは、ストップワードのリストを取得し、stop_word 変数に保存します。

  1. # ストップワードリストを取得する
  2. stop_words = nltk.corpus.stopwords.words( '英語' )

(6)ヒストグラムの作成

テキスト全体に何回出現するかに基づいて、各単語の重要性を評価しましょう。

これを実行するには、(1)単語をクリーンなテキストに分割し、(2)ストップワードを削除し、(3)テキスト内の各単語の頻度を確認します。

  1. # 単語数を保持するための空の辞書を作成する
  2. 単語数 = {}
  3.  
  4. # トークン化された単語をループし、ストップワードを削除して単語数を辞書に保存します
  5. nltk.word_tokenize(clean_text)内の単語の場合:
  6. # ストップワードを削除する
  7. 単語  stop_words:
  8. # 単語数を辞書に保存する
  9. 単語  word_count.keys():
  10. word_count[単語] = 1
  11. それ以外
  12. word_count[単語] += 1

単語のヒストグラムをプロットして結果を見てみましょう。

  1. plt.figure(図サイズ=(16,10))
  2. plt.xticks(回転 = 90)
  3. plt.bar(word_count.keys(), word_count.values ()) は、
  4. plt.show()

これを棒グラフに変換し、以下のヘルパー関数を使用して最初の 20 語のみを表示してみましょう。

  1. # 上位の単語を描画するためのヘルパー関数。
  2. def plot_top_words(word_count_dict, show_top_n=20):
  3. word_count_table = pd.DataFrame.from_dict(word_count_dict, orient = 'index' ).rename(columns={0: 'score' })
  4.  
  5. word_count_table.sort_values( by = 'score' ).tail(show_top_n).plot(kind= 'barh' , figsize=(10,10))
  6. plt.show()

最初の20語を表示してみましょう。

  1. plot_top_words(単語数, 20)

上記の画像から、「ai」と「apple」という文字が上部に表示されていることがわかります。この記事はAppleがAIスタートアップを買収したことに関するものなので、これは納得できます。

(7)スコアに応じて文章を並べる

ここで、スコアに基づいて各文の重要度をランク付けします。私達はします:

  • 長い文は必ずしも意味をなさない場合があることを認識し、30 語を超える文を削除します。
  • 次に、文を構成する各単語のスコアを合計して、文のスコアを作成します。

スコアの高い文章が最初にランク付けされます。前の文が私たちの要約とな​​ります。

注: 私の経験では、25 〜 30 語程度であれば良い要約になります。

  1. # 文のスコアを保存するための空の辞書を作成する
  2. 文スコア = {}
  3.  
  4. # トークン化された文をループし、30語未満の文のみを取り出し、単語スコアを追加して文スコアを作成します。
  5. 文中の場合:
  6. # 文中の単語が辞書にあるか確認する
  7. nltk.word_tokenize ( sentence.lower ())内の単語の場合:
  8. word_count.keys()単語が含まれている場合:
  9. # 30語未満の文章のみ受け付けます
  10. len(sentence.split( ' ' )) < 30の場合:
  11. # 単語スコアを文スコアに追加
  12.   sentence_score.keys():
  13. sentence_score[文] = word_count[単語]
  14. それ以外
  15. sentence_score[文] += word_count[単語]

sentence-score 辞書をデータ フレームに変換し、sentence_score を表示します。

注: 辞書では、スコアに基づいて文章を並べ替えることはできないため、辞書に保存されているデータを DataFrame に変換する必要があります。

  1. df_sentence_score = pd.DataFrame.from_dict(sentence_score, orient = 'index' ).rename(columns={0: 'score' })
  2. df_sentence_score.sort_values( by = 'score' 、 ascending = False )

(8)前の文を要約として選択する

ヒープ キュー アルゴリズムを使用して上位 3 つの文を選択し、best_quences 変数に保存します。

通常、3〜5 文で十分です。ドキュメントの長さに応じて、表示する上位の文の数を自由に変更できます。

この場合、テキストが比較的短いため、3 を選択しました。

  1. # 要約としてベスト3文を表示する
  2. ベストセンテンス = heapq.nlargest(3, sentence_score,キー=sentence_score.get)

print および for ループ関数を使用して概要テキストを表示してみましょう。

  1. print( '概要' )
  2. print( '------------------------' )
  3.  
  4. # 元のテキストの文の順序に従って先頭の文を表示します
  5. 文中の場合:
  6. best_sentences内の文の場合:
  7. 印刷(文)

こちらは、Jupyter ノートブックの Github へのリンクです。テキストを要約するためにすぐに使用できる実行可能な Python ファイルも見つかります: https://github.com/louisteo9/personal-text-summarizer

アルゴリズムの動作を見てみましょう。

以下は「Appleがアプリの進化に向けAIスタートアップを5000万ドルで買収」というニュース記事の原文です。

AppleはAIポートフォリオの拡大を目指し、スペインに拠点を置くAIビデオスタートアップ企業Vilynxを約5,000万ドルで買収した。

ブルームバーグの報道によると、AIスタートアップのVilynxはバルセロナに本社を置き、コンピュータービジョンを使用してビデオの映像、テキスト、音声コンテンツを分析して、ビデオの内容を理解するソフトウェアを開発していることで知られている。同社のウェブサイトによると、これにより、ビデオの分類とメタデータのタグ付け、自動ビデオプレビューの生成、ユーザーへの関連コンテンツの推奨が可能になるという。

Apple はメディアに対し、同社は通常、小規模なテクノロジー企業を随時買収しており、今回の買収により、Vilynx のテクノロジーをさまざまなアプリの改善に活用できる可能性があると語った。メディアによると、Siri、検索、写真など Apple に依存しているアプリが候補の可能性があるほか、Apple TV、音楽、ニュースなど、Vilynx のテクノロジーで革命が起ころうとしているアプリもいくつかあるという。

CEOのティム・クック氏が拡張現実の可能性について抱いているビジョンを踏まえると、同社はVilynxのようなAIベースのツールも活用できるだろう。

ニュースによると、この買収によりAppleのAI専門知識も向上し、Vilynxから最大50人のエンジニアとデータサイエンティストが加わり、このスタートアップはAppleのヨーロッパにおける主要なAI研究拠点の1つになるという。

Appleは過去数ヶ月間に人工知能の分野で大きな進歩を遂げており、昨年12月には英国拠点のSpectral Edge、シアトル拠点のXnor.aiを2億ドルで買収、Siriの改良のためにVoysisとInductivを買収した。小規模な企業をひっそりと買収する習慣を持つAppleは、AI分野で足跡を残している。2018年、CEOのティム・クックはインタビューで、同社が6ヶ月間で20社を買収したが、そのうち公に知られているのは6社だけだったと語った。

要約すると次のようになります。

  1. まとめ
  2. ------------------------  
  3. AppleはAIポートフォリオの拡大を目指しスペインに拠点を置くAIビデオスタートアップ企業Vilynxを約5,000万ドル買収した。
  4. CEOのティム・クック氏が拡張現実可能性について抱いているビジョンを踏まえると、同社はVilynxのようなAIベースのツール活用できるだろう。
  5. 小規模な企業をひっそりと買収する習慣を持つ Apple は、 AI分野足跡残しいる

結論

おめでとうございます! Python で個人用のテキスト サマライザーを作成しました。要約がうまくいったといいのですが。

<<:  強化学習の実際の応用例 10 選

>>:  コード生成のためのツリーベースのTransformerアーキテクチャ

推薦する

...

13 のインテリジェントなインタラクティブ AI チャットボット プラットフォーム

[[399108]] [51CTO.com クイック翻訳]ご存知のとおり、チャットボットは企業のサー...

5GとAIの相互影響

技術革新に関しては、私たちは転換点に達したようです。過去 5 年間で、私たちは、アイデアの創出から会...

2019年に主流となった10のAIテクノロジー

1956年にコンピューターの専門家ジョン・マッカーシーが「人工知能」という言葉を作り出して以来、わず...

携帯電話開発者の年収は153万元、機械学習は最高ではない:IEEEの最新給与レポート

私たちは皆工学を勉強していますが、どの分野を選択すべきでしょうか?給与水準は、人々が将来のキャリアを...

2020年の人工知能と機械学習の予測

人々が次の年に向けて準備を進める中、業界の専門家が 2020 年の人工知能と機械学習に関する予測を発...

今後10年間で、AIは次の10の分野で世界に革命を起こすだろう

21 世紀に実現可能かつ実現されるであろう AI の驚くべき応用例をすべて紹介します。 AI が世界...

ChatGPTを使った学生の不正行為を防ぐため、一部の大学教授は紙ベースの試験と手書きのエッセイへの復帰を検討している。

8月14日、人工知能(AI)の発展は教育に新たな課題をもたらしました。フォーチュン誌の最近の報道に...

...

...

業界のハイエンド複合AI人材を育成するために、第5回AICAチーフAIアーキテクトトレーニングプログラムが開始されました。

10月15日、国家深層学習技術応用工学研究所と百度が共同で開始した第5回AICAチーフAIアーキテ...

自動運転車は交通事故のほとんどをなくすことはできないかもしれない

統計によると、交通事故のほぼ主な原因は運転者の過失です。そのため、自動化は長い間、セキュリティにおけ...

機械学習/ディープラーニング プロジェクトを始める 8 つの方法

[[392342]] [51CTO.com クイック翻訳]探索的データ分析から自動機械学習 (Aut...

特許出願は世界中に広がっています!中国の新興人工知能についてあなたが知らないこと

待望の2020年世界インターネット会議が先日、烏鎮で開催されました。中国サイバースペースアカデミーが...