中條 美冬

1643112728

Pythonでトランスフォーマーを使用してテキストを言い換える方法

トランスフォーマーライブラリで事前にトレーニングされたさまざまなトランスフォーマーモデルを調べて、Pythonで文を言い換えます。
言い換えは、自分の言葉で他人のアイデアを思いつくプロセスです。テキストを言い換えるには、意味を変えずに書き直す必要があります。

このチュートリアルでは、PythonのHuggingfaceトランスフォーマーライブラリを使用してテキストを自動的に言い換えるための、事前にトレーニングされたさまざまなトランスフォーマーモデルについて説明します。

開始するには、最初に必要なライブラリをインストールしましょう。

$ pip install transformers sentencepiece

トランスフォーマーライブラリからすべてをインポートする:

from transformers import *

ペガサストランスフォーマー

このセクションでは、要約ではなく言い換えのために微調整されたPegasusトランスフォーマーアーキテクチャモデルを使用します。モデルをインスタンス化PegasusForConditionalGenerationするには、テキスト生成の形式であるため、使用する必要があります

model = PegasusForConditionalGeneration.from_pretrained("tuner007/pegasus_paraphrase")
tokenizer = PegasusTokenizerFast.from_pretrained("tuner007/pegasus_paraphrase")

次に、モデル、そのトークナイザー、ターゲットセンテンスを受け取り、言い換えられたテキストを返す一般的な関数を作成しましょう。

def get_paraphrased_sentences(model, tokenizer, sentence, num_return_sequences=5, num_beams=5):
  # tokenize the text to be form of a list of token IDs
  inputs = tokenizer([sentence], truncation=True, padding="longest", return_tensors="pt")
  # generate the paraphrased sentences
  outputs = model.generate(
    **inputs,
    num_beams=num_beams,
    num_return_sequences=num_return_sequences,
  )
  # decode the generated sentences using the tokenizer to get them back to text
  return tokenizer.batch_decode(outputs, skip_special_tokens=True)

またnum_return_sequencesmodel.generate()メソッドに渡すことにより、複数の言い換えられた文を生成する可能性を追加します。

またnum_beams、ビーム検索を使用して言い換えを生成するように設定しました。5に設定すると、モデルは5つの可能な単語を先読みして、各タイムステップで最も可能性の高い仮説を維持し、全体的に最も確率の高いものを選択できます。

メソッドのパラメーターの詳細については、このブログ投稿を確認することを強くお勧めしますmodel.generate() 。

今すぐ関数を使用してみましょう:

sentence = "Learning is the process of acquiring new understanding, knowledge, behaviors, skills, values, attitudes, and preferences."
get_paraphrased_sentences(model, tokenizer, sentence, num_beams=10, num_return_sequences=10)

10に設定num_beamsし、モデルに10個の異なる文を生成するように促します。出力は次のとおりです。

['Learning involves the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes, and preferences.',
 'Learning is the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes, and preferences.',
 'The process of learning is the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes, and preferences.',
 'Gaining new understanding, knowledge, behaviors, skills, values, attitudes, and preferences is the process of learning.',
 'New understanding, knowledge, behaviors, skills, values, attitudes, and preferences are acquired through learning.',
 'Learning is the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes and preferences.',
 'The process of learning is the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes and preferences.',
 'New understanding, knowledge, behaviors, skills, values, attitudes, and preferences can be acquired through learning.',
 'New understanding, knowledge, behaviors, skills, values, attitudes, and preferences are what learning is about.',
 'Gaining new understanding, knowledge, behaviors, skills, values, attitudes, and preferences is a process of learning.']

素晴らしい結果!ほとんどの世代は正確であり、使用することができます。あなたはあなたの心から別の文章を試して、自分で結果を見ることができます。

こちらでモデルカードを確認でき ます。

T5トランスフォーマー

このセクションでは、PAWSデータセットで微調整されたT5アーキテクチャモデルについて説明します。PAWSは、108,463の人間ラベルと656kのノイズラベルのペアで構成されています。モデルとトークナイザーをロードしましょう。

tokenizer = AutoTokenizer.from_pretrained("Vamsi/T5_Paraphrase_Paws")
model = AutoModelForSeq2SeqLM.from_pretrained("Vamsi/T5_Paraphrase_Paws")

以前に定義した関数を使用してみましょう。

get_paraphrased_sentences(model, tokenizer, "One of the best ways to learn is to teach what you've already learned")

出力:

["One of the best ways to learn is to teach what you've already learned.",
 'One of the best ways to learn is to teach what you have already learned.',
 'One of the best ways to learn is to teach what you already know.',
 'One of the best ways to learn is to teach what you already learned.',
 "One of the best ways to learn is to teach what you've already learned."]

これらも有望な結果です。"paraphrase: "ただし、 T5は機械翻訳テキスト要約などの複数のテキストからテキストへのNLPタスクを対象としていたため、あまり適切ではない言い換えテキストを取得した場合は、入力テキストにを追加できます。それは事前に訓練され、そのように微調整されました。 

こちらでモデルカードを確認できます。

オウムの言い換え

最後に、 Parrotと呼ばれる微調整されたT5モデルアーキテクチャを使用しましょう。これは、NLUモデルのトレーニングを高速化するために構築された拡張フレームワークです。微調整されたモデルの作成者は、言い換えを実行するために小さなライブラリを作成しました。それをインストールしましょう:

$ pip install git+https://github.com/PrithivirajDamodaran/Parrot_Paraphraser.git

それをインポートしてモデルを初期化する:

from parrot import Parrot

parrot = Parrot()

これにより、モデルのウェイトとトークナイザーがダウンロードされ、しばらく時間がかかります。インターネット接続に応じて、数秒から数分で完了します。

このライブラリは複数のモデルを使用しています。言い換えには1つのモデルを使用し、1つは妥当性の計算に、もう1つは流暢さの計算に、最後のモデルは多様性に使用します。

前の文と別の文を使用して、結果を見てみましょう。

phrases = [
  sentence,
  "One of the best ways to learn is to teach what you've already learned",
  "Paraphrasing is the process of coming up with someone else's ideas in your own words"
]

for phrase in phrases:
  print("-"*100)
  print("Input_phrase: ", phrase)
  print("-"*100)
  paraphrases = parrot.augment(input_phrase=phrase)
  for paraphrase in paraphrases:
   print(paraphrase)

このライブラリでは、parrot.augment()メソッドを使用して文をテキスト形式で渡すだけで、言い換えられたいくつかの候補テキストが返されます。出力を確認します。

----------------------------------------------------------------------------------------------------
Input_phrase:  Learning is the process of acquiring new understanding, knowledge, behaviors, skills, values, attitudes, and preferences.
----------------------------------------------------------------------------------------------------
('learning is the process of acquiring new knowledge behaviors skills values attitudes and preferences', 27)
('learning is the process of acquiring new understanding knowledge behaviors skills values attitudes and preferences', 13)
----------------------------------------------------------------------------------------------------
Input_phrase:  One of the best ways to learn is to teach what you've already learned
----------------------------------------------------------------------------------------------------
('one of the best ways to learn is to teach what you know', 29)
('one of the best ways to learn is to teach what you already know', 21)
('one of the best ways to learn is to teach what you have already learned', 15)
----------------------------------------------------------------------------------------------------
Input_phrase:  Paraphrasing is the process of coming up with someone else's ideas in your own words
----------------------------------------------------------------------------------------------------
("paraphrasing is the process of coming up with a person's ideas in your own words", 23)
("paraphrasing is the process of coming up with another person's ideas in your own words", 23)
("paraphrasing is the process of coming up with another's ideas in your own words", 22)
("paraphrasing is the process of coming up with someone's ideas in your own words", 17)
("paraphrasing is the process of coming up with somebody else's ideas in your own words", 15)
("paraphrasing is the process of coming up with someone else's ideas in your own words", 12)

各文に付随する数字が多様性スコアです。値が高いほど、元の文に対する文の多様性が増します。

ここでParrotParaphraserリポジトリを確認できます

大丈夫!チュートリアルは以上です。うまくいけば、トランスフォーマーとAI一般を使用して自動テキスト言い換えを実行するための最も価値のある方法を探求したことでしょう。

What is GEEK

Buddha Community

中條 美冬

1643112728

Pythonでトランスフォーマーを使用してテキストを言い換える方法

トランスフォーマーライブラリで事前にトレーニングされたさまざまなトランスフォーマーモデルを調べて、Pythonで文を言い換えます。
言い換えは、自分の言葉で他人のアイデアを思いつくプロセスです。テキストを言い換えるには、意味を変えずに書き直す必要があります。

このチュートリアルでは、PythonのHuggingfaceトランスフォーマーライブラリを使用してテキストを自動的に言い換えるための、事前にトレーニングされたさまざまなトランスフォーマーモデルについて説明します。

開始するには、最初に必要なライブラリをインストールしましょう。

$ pip install transformers sentencepiece

トランスフォーマーライブラリからすべてをインポートする:

from transformers import *

ペガサストランスフォーマー

このセクションでは、要約ではなく言い換えのために微調整されたPegasusトランスフォーマーアーキテクチャモデルを使用します。モデルをインスタンス化PegasusForConditionalGenerationするには、テキスト生成の形式であるため、使用する必要があります

model = PegasusForConditionalGeneration.from_pretrained("tuner007/pegasus_paraphrase")
tokenizer = PegasusTokenizerFast.from_pretrained("tuner007/pegasus_paraphrase")

次に、モデル、そのトークナイザー、ターゲットセンテンスを受け取り、言い換えられたテキストを返す一般的な関数を作成しましょう。

def get_paraphrased_sentences(model, tokenizer, sentence, num_return_sequences=5, num_beams=5):
  # tokenize the text to be form of a list of token IDs
  inputs = tokenizer([sentence], truncation=True, padding="longest", return_tensors="pt")
  # generate the paraphrased sentences
  outputs = model.generate(
    **inputs,
    num_beams=num_beams,
    num_return_sequences=num_return_sequences,
  )
  # decode the generated sentences using the tokenizer to get them back to text
  return tokenizer.batch_decode(outputs, skip_special_tokens=True)

またnum_return_sequencesmodel.generate()メソッドに渡すことにより、複数の言い換えられた文を生成する可能性を追加します。

またnum_beams、ビーム検索を使用して言い換えを生成するように設定しました。5に設定すると、モデルは5つの可能な単語を先読みして、各タイムステップで最も可能性の高い仮説を維持し、全体的に最も確率の高いものを選択できます。

メソッドのパラメーターの詳細については、このブログ投稿を確認することを強くお勧めしますmodel.generate() 。

今すぐ関数を使用してみましょう:

sentence = "Learning is the process of acquiring new understanding, knowledge, behaviors, skills, values, attitudes, and preferences."
get_paraphrased_sentences(model, tokenizer, sentence, num_beams=10, num_return_sequences=10)

10に設定num_beamsし、モデルに10個の異なる文を生成するように促します。出力は次のとおりです。

['Learning involves the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes, and preferences.',
 'Learning is the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes, and preferences.',
 'The process of learning is the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes, and preferences.',
 'Gaining new understanding, knowledge, behaviors, skills, values, attitudes, and preferences is the process of learning.',
 'New understanding, knowledge, behaviors, skills, values, attitudes, and preferences are acquired through learning.',
 'Learning is the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes and preferences.',
 'The process of learning is the acquisition of new understanding, knowledge, behaviors, skills, values, attitudes and preferences.',
 'New understanding, knowledge, behaviors, skills, values, attitudes, and preferences can be acquired through learning.',
 'New understanding, knowledge, behaviors, skills, values, attitudes, and preferences are what learning is about.',
 'Gaining new understanding, knowledge, behaviors, skills, values, attitudes, and preferences is a process of learning.']

素晴らしい結果!ほとんどの世代は正確であり、使用することができます。あなたはあなたの心から別の文章を試して、自分で結果を見ることができます。

こちらでモデルカードを確認でき ます。

T5トランスフォーマー

このセクションでは、PAWSデータセットで微調整されたT5アーキテクチャモデルについて説明します。PAWSは、108,463の人間ラベルと656kのノイズラベルのペアで構成されています。モデルとトークナイザーをロードしましょう。

tokenizer = AutoTokenizer.from_pretrained("Vamsi/T5_Paraphrase_Paws")
model = AutoModelForSeq2SeqLM.from_pretrained("Vamsi/T5_Paraphrase_Paws")

以前に定義した関数を使用してみましょう。

get_paraphrased_sentences(model, tokenizer, "One of the best ways to learn is to teach what you've already learned")

出力:

["One of the best ways to learn is to teach what you've already learned.",
 'One of the best ways to learn is to teach what you have already learned.',
 'One of the best ways to learn is to teach what you already know.',
 'One of the best ways to learn is to teach what you already learned.',
 "One of the best ways to learn is to teach what you've already learned."]

これらも有望な結果です。"paraphrase: "ただし、 T5は機械翻訳テキスト要約などの複数のテキストからテキストへのNLPタスクを対象としていたため、あまり適切ではない言い換えテキストを取得した場合は、入力テキストにを追加できます。それは事前に訓練され、そのように微調整されました。 

こちらでモデルカードを確認できます。

オウムの言い換え

最後に、 Parrotと呼ばれる微調整されたT5モデルアーキテクチャを使用しましょう。これは、NLUモデルのトレーニングを高速化するために構築された拡張フレームワークです。微調整されたモデルの作成者は、言い換えを実行するために小さなライブラリを作成しました。それをインストールしましょう:

$ pip install git+https://github.com/PrithivirajDamodaran/Parrot_Paraphraser.git

それをインポートしてモデルを初期化する:

from parrot import Parrot

parrot = Parrot()

これにより、モデルのウェイトとトークナイザーがダウンロードされ、しばらく時間がかかります。インターネット接続に応じて、数秒から数分で完了します。

このライブラリは複数のモデルを使用しています。言い換えには1つのモデルを使用し、1つは妥当性の計算に、もう1つは流暢さの計算に、最後のモデルは多様性に使用します。

前の文と別の文を使用して、結果を見てみましょう。

phrases = [
  sentence,
  "One of the best ways to learn is to teach what you've already learned",
  "Paraphrasing is the process of coming up with someone else's ideas in your own words"
]

for phrase in phrases:
  print("-"*100)
  print("Input_phrase: ", phrase)
  print("-"*100)
  paraphrases = parrot.augment(input_phrase=phrase)
  for paraphrase in paraphrases:
   print(paraphrase)

このライブラリでは、parrot.augment()メソッドを使用して文をテキスト形式で渡すだけで、言い換えられたいくつかの候補テキストが返されます。出力を確認します。

----------------------------------------------------------------------------------------------------
Input_phrase:  Learning is the process of acquiring new understanding, knowledge, behaviors, skills, values, attitudes, and preferences.
----------------------------------------------------------------------------------------------------
('learning is the process of acquiring new knowledge behaviors skills values attitudes and preferences', 27)
('learning is the process of acquiring new understanding knowledge behaviors skills values attitudes and preferences', 13)
----------------------------------------------------------------------------------------------------
Input_phrase:  One of the best ways to learn is to teach what you've already learned
----------------------------------------------------------------------------------------------------
('one of the best ways to learn is to teach what you know', 29)
('one of the best ways to learn is to teach what you already know', 21)
('one of the best ways to learn is to teach what you have already learned', 15)
----------------------------------------------------------------------------------------------------
Input_phrase:  Paraphrasing is the process of coming up with someone else's ideas in your own words
----------------------------------------------------------------------------------------------------
("paraphrasing is the process of coming up with a person's ideas in your own words", 23)
("paraphrasing is the process of coming up with another person's ideas in your own words", 23)
("paraphrasing is the process of coming up with another's ideas in your own words", 22)
("paraphrasing is the process of coming up with someone's ideas in your own words", 17)
("paraphrasing is the process of coming up with somebody else's ideas in your own words", 15)
("paraphrasing is the process of coming up with someone else's ideas in your own words", 12)

各文に付随する数字が多様性スコアです。値が高いほど、元の文に対する文の多様性が増します。

ここでParrotParaphraserリポジトリを確認できます

大丈夫!チュートリアルは以上です。うまくいけば、トランスフォーマーとAI一般を使用して自動テキスト言い換えを実行するための最も価値のある方法を探求したことでしょう。