マルコフ連鎖を使用したテキストジェネレーターの構築
この記事では、人気の機械学習プロジェクトであるテキスト ジェネレーターを紹介します。テキスト ジェネレーターを構築する方法と、より高速な予測モデルを実現するためのマルコフ連鎖の実装方法を学びます。
テキスト ジェネレーターの概要
テキスト生成は、あらゆる業界、特にモバイル、アプリ、データ サイエンスの分野で人気があります。報道機関でも、執筆プロセスを支援するためにテキスト生成を使用しています。
日常生活では、いくつかのテキスト生成テクノロジに触れることがあります。テキスト補完、検索候補、スマート作成、チャット ロボットなどはすべてアプリケーションの例です。
この記事ではマルコフを使用します。テキストジェネレーターを構築するためのチェーン。これは、チェーンの前の文字を取得し、シーケンス内の次の文字を生成する文字ベースのモデルになります。
例の単語を使用してプログラムをトレーニングすることにより、テキスト ジェネレーターは一般的な文字の順序パターンを学習します。次に、テキスト ジェネレーターはこれらのパターンを不完全な単語である入力に適用し、単語を完成させる可能性が最も高い文字を出力します。
#テキスト生成は、以前に観察された言語パターンに基づいて次の文字を予測して生成する自然言語処理の分野です。
機械学習の前に、NLP は英語のすべての単語を含むテーブルを作成し、渡された文字列を既存の単語と照合することでテキスト生成を実行していました。このアプローチには 2 つの問題があります。
- 何千もの単語を検索すると、非常に時間がかかります。
- ジェネレーターは、以前に見たことのある単語のみを完成させることができます。
機械学習と深層学習の出現により、ジェネレーターがこれまでに遭遇したことのない単語を完成させることができるため、実行時間が大幅に短縮され、NLP の汎用性が向上しました。 NLP は、必要に応じて単語、フレーズ、文を予測するように拡張できます!
このプロジェクトでは、マルコフ連鎖のみを使用して実行します。マルコフ プロセスは、書き言葉や複雑な分布からのサンプルのシミュレーションを含む多くの自然言語処理プロジェクトの基礎です。
マルコフ プロセスは非常に強力であるため、サンプル ドキュメントだけを使用して、一見本物のように見えるテキストを生成することができます。
マルコフ連鎖とは何ですか?
マルコフ連鎖は、各イベントの確率が前のイベントの状態に依存する一連のイベントをモデル化する確率過程です。モデルには有限の状態セットがあり、ある状態から別の状態に移行する条件付き確率は固定されています。
各遷移の確率は、イベントの履歴全体ではなく、モデルの以前の状態にのみ依存します。
たとえば、天気を予測するためにマルコフ連鎖モデルを構築するとします。
このモデルには、晴れまたは雨の 2 つの状態があります。今日晴れた日であれば、明日は晴れる可能性が高くなります (70%)。雨も同様で、一度雨が降った場合は、さらに雨が降り続ける可能性があります。
しかし、天候によって状態が変化する可能性 (30%) があるため、それもマルコフ連鎖モデルに含めます。
マルコフ連鎖は、前の文字のみを使用して次の文字を予測するため、テキスト ジェネレーターに最適なモデルです。マルコフ連鎖を使用する利点は、正確で、必要なメモリが少なく (前の状態が 1 つだけ保存される)、実行が速いことです。
テキスト生成の実装
テキストジェネレーターは6つのステップで完成します:
- ルックアップテーブルの生成:単語の出現頻度を記録するテーブルを作成します
- 頻度を確率に変換する: 調査結果を使用可能な形式に変換する
- データセットをロードする: トレーニング セットをロードして利用する
- マルコフ連鎖を構築する: 各単語および文字作成連鎖に確率を使用する
- データをサンプリングする: コーパスのさまざまな部分をサンプリングする関数を作成する
- テキストを生成する: モデルをテストする
1ルックアップ テーブルの生成
まず、トレーニング コーパス内の各文字状態の出現を記録するテーブルを作成します。トレーニング コーパスから最後の「K」文字と「K1」文字を保存し、ルックアップ テーブルに保存します。
たとえば、トレーニング コーパスに「the man was, they, then, the, the」が含まれていると想像してください。この場合、単語の出現数は次のようになります。
- #"the" — 3
- "then" — 1
- "they" — 1
- " man" — 1
ルックアップ テーブルの結果は次のとおりです:
上記の例では、K = 3 とします。これは、一度に 3 文字が考慮され、次の文字 (K 1) が出力として使用されることを意味します。キャラクター。最初の the の後に単語がないため、単語 (X) を上記のルックアップ テーブル内の文字として扱い、出力文字 (Y) を単一のスペース (" ") として扱います。また、このシーケンスがデータ セット内に出現する回数 (この場合は 3 回) も計算されます。
これにより、コーパス内の各単語のデータが生成されます。つまり、考えられるすべての X と Y のペアが生成されます。
コード内でルックアップ テーブルを生成する方法は次のとおりです:
def generateTable(data,k=4): T = {} for i in range(len(data)-k): X = data[i:i+k] Y = data[i+k] #print("X %s and Y %s "%(X,Y)) if T.get(X) is None: T[X] = {} T[X][Y] = 1 else: if T[X].get(Y) is None: T[X][Y] = 1 else: T[X][Y] += 1 return T T = generateTable("hello hello helli") print(T) #{'llo ': {'h': 2}, 'ello': {' ': 2}, 'o he': {'l': 2}, 'lo h': {'e': 2}, 'hell': {'i': 1, 'o': 2}, ' hel': {'l': 2}}
コードの簡単な説明:
3 行目で、X とその値を格納する辞書が作成されます。対応する Y 値と周波数値。行 9 から 17 は、X と Y の出現をチェックします。ルックアップ辞書にすでに X と Y のペアがある場合は、それを 1 だけ増やします。
2. 頻度を確率に変換する
このテーブルと出現回数を取得したら、特定の x の出現後に Y が出現する確率を取得できます。式は次のとおりです:
たとえば、X = the、Y = n の場合、式は次のようになります:
X =the Y = n の場合頻度: 2、テーブル内の合計頻度: 8、したがって: P = 2/8= 0.125= 12.5%
この式を適用してルックアップ テーブルを使用可能な確率を持つマルコフ連鎖に変換する方法を次に示します。
def convertFreqIntoProb(T): for kx in T.keys(): s = float(sum(T[kx].values())) for k in T[kx].keys(): T[kx][k] = T[kx][k]/s return T T = convertFreqIntoProb(T) print(T) #{'llo ': {'h': 1.0}, 'ello': {' ': 1.0}, 'o he': {'l': 1.0}, 'lo h': {'e': 1.0}, 'hell': {'i': 0.3333333333333333, 'o': 0.6666666666666666}, ' hel': {'l': 1.0}}
簡単な説明:
特定のキーの頻度値を加算し、このキーの各頻度値を加算した値で除算して確率を取得します。
3. データセットをロードします
次に実際のトレーニング コーパスがロードされます。任意の長いテキスト (.txt) ドキュメントを使用できます。
わかりやすくするために、モデルを教えるのに十分な語彙を提供するために政治的演説が使用されます。
text_path = "train_corpus.txt" def load_text(filename): with open(filename,encoding='utf8') as f: return f.read().lower() text = load_text(text_path) print('Loaded the dataset.')
このデータ セットは、サンプル プロジェクトがかなり正確な予測を行うのに十分なイベントを提供できます。すべての機械学習と同様、トレーニング コーパスが大きいほど、より正確な予測が生成されます。
4. マルコフ連鎖を構築する
マルコフ連鎖を構築し、確率を各文字に関連付けましょう。ここでは、手順 1 と 2 で作成したgenerateTable() 関数とconvertFreqIntoProb() 関数を使用してマルコフ モデルを構築します。
def MarkovChain(text,k=4): T = generateTable(text,k) T = convertFreqIntoProb(T) return T model = MarkovChain(text)
1 行目では、マルコフ モデルを生成するメソッドが作成されます。このメソッドは、テキスト コーパスと K 値を受け入れます。K 値は、マルコフ モデルに K 文字を考慮して次の文字を予測するように指示する値です。 2 行目、ルックアップ テーブルは、前のセクションで作成したメソッドgenerateTable() にテキスト コーパスと K を提供することによって生成されます。 3 行目では、convertFreqIntoProb() メソッドを使用して周波数を確率値に変換します。このメソッドも前のレッスンで作成しました。
5. テキスト サンプリング
未完成の単語 (ctx)、ステップ 4 のマルコフ連鎖モデル (モデル)、および単語を形成するためのベースを使用するサンプリング関数を作成します文字数(k)。
この関数を使用して、渡されたコンテキストをサンプリングし、次に考えられる文字を返し、それが正しい文字である確率を判断します。
import numpy as np def sample_next(ctx,model,k): ctx = ctx[-k:] if model.get(ctx) is None: return " " possible_Chars = list(model[ctx].keys()) possible_values = list(model[ctx].values()) print(possible_Chars) print(possible_values) return np.random.choice(possible_Chars,p=possible_values) sample_next("commo",model,4) #['n'] #[1.0]
コードの説明:
関数sample_nextは、ctx、model、k値の3つのパラメータを受け取ります。
ctx は、新しいテキストを生成するために使用されるテキストです。ただし、ここでは、ctx の最後の K 文字のみが、シーケンス内の次の文字を予測するためにモデルによって使用されます。たとえば、common、K = 4 を渡します。マルコフ モデルは前の履歴のみを使用するため、モデルが次の文字を生成するために使用するテキストは ommo です。
行 9 と 10 には、使用可能な文字とその確率値が出力されます。これらの文字はモデルにも存在するためです。次に予測される文字は n であり、確率は 1.0 です。 12 行目で次の文字
を生成した後は、commo という単語がより一般的になる可能性が高いため、上で説明した確率値に基づいて文字を返します。
6. テキストの生成
最後に、上記の関数をすべて組み合わせてテキストを生成します。
def generateText(starting_sent,k=4,maxLen=1000): sentence = starting_sent ctx = starting_sent[-k:] for ix in range(maxLen): next_prediction = sample_next(ctx,model,k) sentence += next_prediction ctx = sentence[-k:] return sentence print("Function Created Successfully!") text = generateText("dear",k=4,maxLen=2000) print(text)
結果は次のとおりです:
dear country brought new consciousness. i heartily great service of their lives, our country, many of tricoloring a color flag on their lives independence today.my devoted to be oppression of independence.these day the obc common many country, millions of oppression of massacrifice of indian whom everest. my dear country is not in the sevents went was demanding and nights by plowing in the message of the country is crossed, oppressed, women, to overcrowding for years of the south, it is like the ashok chakra of constitutional states crossed, deprived, oppressions of freedom, i bow my heart to proud of our country.my dear country, millions under to be a hundred years of the south, it is going their heroes.
上記の関数は、生成されるテキストの開始単語、K の値、および必要なテキストの最大文字長という 3 つのパラメーターを受け取ります。コードを実行すると、「dear」で始まる 2000 文字のテキストが生成されます。
このスピーチはあまり意味をなさないかもしれませんが、言葉は完全であり、よく知られた言葉のパターンを模倣していることがよくあります。
次に学ぶべきこと
これは、単純なテキスト生成プロジェクトです。このプロジェクトを使用して、自然言語処理とマルコフ連鎖が実際にどのように機能するかを学び、深層学習の取り組みを続けるときに使用できます。
この記事はマルコフ連鎖による実験プロジェクトを紹介するだけであり、実際のアプリケーションでは何の役にも立ちませんので、より良いテキスト生成効果を得たい場合は、GPT-3 などのツールを学習してください。 。
以上がマルコフ連鎖を使用したテキストジェネレーターの構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









機械学習とデータ サイエンスの分野では、モデルの解釈可能性が常に研究者や実務家に焦点を当ててきました。深層学習やアンサンブル手法などの複雑なモデルが広く適用されるようになったことで、モデルの意思決定プロセスを理解することが特に重要になってきました。 Explainable AI|XAI は、モデルの透明性を高めることで、機械学習モデルに対する信頼と自信を構築するのに役立ちます。モデルの透明性の向上は、複数の複雑なモデルの普及や、モデルを説明するための意思決定プロセスなどの方法によって実現できます。これらの方法には、特徴重要度分析、モデル予測間隔推定、ローカル解釈可能性アルゴリズムなどが含まれます。特徴重要度分析では、入力特徴に対するモデルの影響度を評価することで、モデルの意思決定プロセスを説明できます。モデルの予測間隔の推定

平たく言えば、機械学習モデルは、入力データを予測された出力にマッピングする数学関数です。より具体的には、機械学習モデルは、予測出力と真のラベルの間の誤差を最小限に抑えるために、トレーニング データから学習することによってモデル パラメーターを調整する数学関数です。機械学習には、ロジスティック回帰モデル、デシジョン ツリー モデル、サポート ベクター マシン モデルなど、多くのモデルがあります。各モデルには、適用可能なデータ タイプと問題タイプがあります。同時に、異なるモデル間には多くの共通点があったり、モデル進化の隠れた道が存在したりすることがあります。コネクショニストのパーセプトロンを例にとると、パーセプトロンの隠れ層の数を増やすことで、それをディープ ニューラル ネットワークに変換できます。パーセプトロンにカーネル関数を追加すると、SVM に変換できます。これです

この記事では、学習曲線を通じて機械学習モデルの過学習と過小学習を効果的に特定する方法を紹介します。過小適合と過適合 1. 過適合 モデルがデータからノイズを学習するためにデータ上で過学習されている場合、そのモデルは過適合していると言われます。過学習モデルはすべての例を完璧に学習するため、未確認の新しい例を誤って分類してしまいます。過適合モデルの場合、完璧/ほぼ完璧なトレーニング セット スコアとひどい検証セット/テスト スコアが得られます。若干修正: 「過学習の原因: 複雑なモデルを使用して単純な問題を解決し、データからノイズを抽出します。トレーニング セットとしての小さなデータ セットはすべてのデータを正しく表現できない可能性があるため、2. 過学習の Heru。」

1950 年代に人工知能 (AI) が誕生しました。そのとき、研究者たちは、機械が思考などの人間と同じようなタスクを実行できることを発見しました。その後、1960 年代に米国国防総省は人工知能に資金を提供し、さらなる開発のために研究所を設立しました。研究者たちは、宇宙探査や極限環境での生存など、多くの分野で人工知能の応用を見出しています。宇宙探査は、地球を超えた宇宙全体を対象とする宇宙の研究です。宇宙は地球とは条件が異なるため、極限環境に分類されます。宇宙で生き残るためには、多くの要素を考慮し、予防策を講じる必要があります。科学者や研究者は、宇宙を探索し、あらゆるものの現状を理解することが、宇宙の仕組みを理解し、潜在的な環境危機に備えるのに役立つと信じています。

C++ の機械学習アルゴリズムが直面する一般的な課題には、メモリ管理、マルチスレッド、パフォーマンスの最適化、保守性などがあります。解決策には、スマート ポインター、最新のスレッド ライブラリ、SIMD 命令、サードパーティ ライブラリの使用、コーディング スタイル ガイドラインの遵守、自動化ツールの使用が含まれます。実践的な事例では、Eigen ライブラリを使用して線形回帰アルゴリズムを実装し、メモリを効果的に管理し、高性能の行列演算を使用する方法を示します。

翻訳者 | Li Rui によるレビュー | 今日、人工知能 (AI) および機械学習 (ML) モデルはますます複雑になっており、これらのモデルによって生成される出力はブラックボックスになっており、関係者に説明することができません。 Explainable AI (XAI) は、利害関係者がこれらのモデルがどのように機能するかを理解できるようにし、これらのモデルが実際に意思決定を行う方法を確実に理解できるようにし、AI システムの透明性、信頼性、およびこの問題を解決するための説明責任を確保することで、この問題を解決することを目指しています。この記事では、さまざまな説明可能な人工知能 (XAI) 手法を検討して、その基礎となる原理を説明します。説明可能な AI が重要であるいくつかの理由 信頼と透明性: AI システムが広く受け入れられ、信頼されるためには、ユーザーは意思決定がどのように行われるかを理解する必要があります

MetaFAIR はハーバード大学と協力して、大規模な機械学習の実行時に生成されるデータの偏りを最適化するための新しい研究フレームワークを提供しました。大規模な言語モデルのトレーニングには数か月かかることが多く、数百、さらには数千の GPU を使用することが知られています。 LLaMA270B モデルを例にとると、そのトレーニングには合計 1,720,320 GPU 時間が必要です。大規模なモデルのトレーニングには、これらのワークロードの規模と複雑さにより、特有のシステム上の課題が生じます。最近、多くの機関が、SOTA 生成 AI モデルをトレーニングする際のトレーニング プロセスの不安定性を報告しています。これらは通常、損失スパイクの形で現れます。たとえば、Google の PaLM モデルでは、トレーニング プロセス中に最大 20 回の損失スパイクが発生しました。数値的なバイアスがこのトレーニングの不正確さの根本原因です。

機械学習は人工知能の重要な分野であり、明示的にプログラムしなくてもコンピューターにデータから学習して能力を向上させる機能を提供します。機械学習は、画像認識や自然言語処理から、レコメンデーションシステムや不正行為検出に至るまで、さまざまな分野で幅広く応用されており、私たちの生活様式を変えつつあります。機械学習の分野にはさまざまな手法や理論があり、その中で最も影響力のある 5 つの手法は「機械学習の 5 つの流派」と呼ばれています。 5 つの主要な学派は、象徴学派、コネクショニスト学派、進化学派、ベイジアン学派、およびアナロジー学派です。 1. 象徴主義は、象徴主義とも呼ばれ、論理的推論と知識の表現のためのシンボルの使用を強調します。この学派は、学習は既存の既存の要素を介した逆演繹のプロセスであると信じています。
