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アーキテクチャ

ブログ    
ブログ    

推薦する

AIビデオ監視の普及における3つの大きな課題

近年、セキュリティビデオ監視はソフトウェアとハ​​ードウェアの両方で大きな技術的進歩を遂げており、さ...

ソートアルゴリズムのより詳細な概要

ソートアルゴリズム平均時間計算量バブルソート (n2) 選択ソート (n2) 挿入ソート (n2) ...

人工知能は人間の臨床試験に取って代わることができるでしょうか?

2013年のノーベル化学賞受賞者であるアリエ・ワーシェル氏は、COVID-19パンデミックと製薬業...

スマート建設現場: 2021 年に注目すべき 5 つのスマート建設技術

革新的な建設技術により、大規模建設プロジェクトの安全性、効率性、生産性が大幅に向上します。建設業界に...

人工知能は優れたサイバーセキュリティツールだが、諸刃の剣でもある

[[245793]]セキュリティにおける AI の役割は、ホワイトハットハッカーとサイバー犯罪者の両...

...

NeO 360: 屋外シーンのスパースビュー合成のためのニューラルフィールド

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

集める! 2017 年の主要な AI イベントを総ざらい!(動画付き)

[[219484]] 2017 年に 1 年間眠っていたのに、突然目が覚めて、今年世界で最も誇るべ...

英国メディアが人工知能の軍事応用とそのリスクを分析

[[440377]]はじめに12月7日、英国のドローン戦争ウェブサイトは、人工知能が各国の軍事部門に...

Appleのアプリランキングアルゴリズム調整の裏側:ランキング管理企業が一夜にして沈黙

4月1日早朝のニュース:3月初旬から、AppleはAppランキングアルゴリズムを徐々に調整し、ランキ...

台北の5G自動運転バスが試乗開始

「台北市信義路バスレーン自動運転バスイノベーション実験プロジェクト」は台北市で長らくテストされており...

スウェット物流からスマート物流へ、物流業界はよりスマートになっている

2020年は異例の年です。新型コロナウイルスの世界的な蔓延は人々の生活や仕事に多くの不便をもたらし、...

BingチャットAIの品質に問題があるとユーザーが報告、マイクロソフトはエクスペリエンスの改善を約束

ここ数週間、ユーザーは Microsoft Edge に組み込まれている GPT-4 AI チャット...

ディープラーニングとディープクローニング: チャットボットにとってより優れたソリューションはどちらでしょうか?

[[200112]]編集者注: チャットボットは目新しいものではありません。Facebook や ...