ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
マルチリンガルな自然言語モデルの紹介
マルチリンガルなTransformerベースの埋め込みを使用して、カスタム自然言語モデルを作成し、テキスト分類や、単語のタグ付けに役立てましょう。少ないデータでトレーニングを行い、3つのスクリプトで最大27の言語をサポートする方法を紹介します。これらの埋め込みを使用して、PyTorchやTensorFlowでトレーニングした複雑なモデルを微調整する方法を紹介します。自然言語の詳細については、WWDC20の「Make apps smarter with Natural Language」をご覧ください。
リソース
関連ビデオ
WWDC23
WWDC20
WWDC19
-
ダウンロード
♪ ♪
ようこそ Doug Davidsonです 本日は自然言語処理(NLP)について お話します ここ数年 自然言語処理に 関するセッションは 数多く行われてきました 本日はそれらを基に エキサイティングな 新機能についてお話します まず NLPとNLPモデルの 背景について説明します 次に 既存の機能についてまとめます そして 今年の新機能についてお話します 高度な応用例についても解説します その後 まとめに入ります では背景について説明します 図式的に NLPモデルは 似たような流れを持っています テキストデータから始まり それを数値的特徴の表現に変換する 入力レイヤーを持ち 機械学習モデルがそれを基にして 出力を生成します その最も分かりやすい過去の例は テキスト分類や単語タグ付けに 対応した Create MLモデルになります 分野としてのNLPの発展は 入力レイヤーの 洗練されたバージョンの開発をたどれば かなり詳細に理解できます
10から20年前は 単純な正書法が特徴でした そして10年ほど前から Word2VecやGloVeのような 静的単語埋め込みが 使われるようになりました その後 CNNやLSTMのような ニューラルネットワークモデルに基づく コンテキスト単語埋め込み そして最近ではTransformerベースの 言語モデルが使われています 埋め込みとは何か 少し説明します 最も単純な形では 言語内の単語から 抽象的なベクトル空間内の ベクトルへのマッピングにすぎませんが ベクトル空間内で 似た意味を持つ 単語が近接するよう 機械学習モデルにより訓練されます これにより 言語的知識を 組み込むことができます 静的埋め込みは 単語からベクトルへの 単純なマッピングです 単語を入力すると モデルはそれを 表から検索し ベクトルを提供します これらは 似た意味を持つ単語が ベクトル空間内で 近接するようにトレーニングされます これは個々の単語を 理解するうえで大変便利です より洗練された埋め込み方法は 文中の各単語が 文中での使用状況に応じて 異なるベクトルにマッピングされるような 動的で文脈的なものです たとえば“fast food joint”の“food”は “food for thought”の“food”とは 意味が異なるので 異なる埋め込みベクトルを獲得します 入力レイヤーとして 強力な埋め込みを獲得するための ポイントは 転移学習を可能にすることです 大量のデータで埋め込みを学習し 言語の一般的な知識をカプセル化し この知識を タスク特有の膨大な学習データを 必要とすることなく 特定のタスクに転移できます
現在 Create MLはELMoモデルを使用して この種の埋め込みをサポートしています これらのモデルはLSTMに基づいており その出力が結合されて 埋め込みベクトルが生成されます これらは Create MLを介して 分類モデルやタグ付けモデルの トレーニングに使用できます では これまでサポートされた モデルについて説明します これらについては2019年と2020年の セッションで詳しく説明したので ここでは簡単に説明します 自然言語は Create MLを使用した モデルトレーニングをサポートしており 一般的にNLPモデルで見られる パターンに従っています これには テキスト分類と 単語タグ付けという 2つの異なるタスクが含まれます テキスト分類では 入力テキストを一連のクラスの いずれかを使って記述し 出力します たとえば トピックやセンチメントがあります また 単語タグ付けでは 入力テキストの 各単語に 品詞や役割ラベルなどの ラベルを付けて出力します
サポートされるCreate MLモデルは maxenやCRFベースのモデルから始まり 静的単語埋め込みをサポートし ELMo埋め込みを使用した Create MLモデルの 動的な単語埋め込みをサポートするなど NLP分野の進化に従ってきました 詳細については 過去のセッションをご覧ください 2019年の「Advances in Natural Language Framework」 2020年の「Make Apps Smarter with Natural Language」があります では 今年の自然言語に関する 新情報をお伝えします Transformerベースのコンテクスト 埋め込みが提供可能になりました 具体的には BERT埋め込みで Bidirectional Encoder Representations from Transformersを略したものです これらの埋め込みモデルは 大量のテキストを マスク言語モデルを使って学習します つまり 1つの単語を 隠した文章をモデルに与え たとえば“food for thought”の “food”のように その単語を提案するよう求め より精度を高めるようトレーニングします
Transformersの核となるのは アテンションメカニズムと呼ばれるもので 具体的にはマルチヘッド セルフアテンションに基づいており これによってモデルは テキストの異なる部分に異なる重みを付け 複数の異なる方法で一度に 考慮することができます マルチヘッドアテンションメカニズムは 他の複数レイヤーに まとめられ 何度も繰り返すことで 大量の テキストデータを活用できる 強力で柔軟なモデルを提供できます そのため 一度に複数の言語で 学習させることができ 多言語モデルにつながります これにはいくつかの利点があります すぐに多言語に対応でき 一度に複数の 言語に対応可能になります しかし何よりも 言語間の類似性から ある言語のデータが他の言語の データに役立つという相乗効果があります そこで私たちは 様々な語族にわたる 27の言語をサポートすることにしました これは3つの別々のモデルで行われ 関連する文字体系を共有する 言語群にそれぞれ1つ対応しています つまり ラテン文字系の言語用に1つ キリル文字を使う言語用に1つ 中国語 日本語 韓国語用に 1つのモデルがあります
これらの埋め込みモデルは 先に説明した Create ML学習にぴったりで 入力エンコード層として機能します この強力なエンコードは 様々なモデルに使えます さらに 学習に使用するデータは すべて同一言語である必要はありません どのように機能するのか 例を挙げて説明します あなたがメッセージアプリを書いていて 受信したメッセージを 自動的に分類して ユーザーをサポートしたいと考えます 3つのカテゴリに分類したいとします 友人から受け取るような個人的なメッセージ 同僚から受け取るようなビジネスメッセージ 企業やお店などから受け取る 商用メッセージの3つです しかし ユーザーは様々な言語で メッセージを受け取る可能性があり それに対応することにします この例では 英語 イタリア語 ドイツ語 スペイン語の 多言語の学習データを用意しました 私はjson形式を使いましたが ディレクトリやCSVも使えます モデルをトレーニングするには Create ML アプリでプロジェクトを作成します 次に トレーニングデータを選択します
検証用データとテストデータも 一緒に用意しました
次にアルゴリズムを選択しますが ここではBERT埋め込みという 新たな選択肢があります
これらを選択すると スクリプトを選択できます 今回はラテン文字の言語なので Latinのままにします 単一の言語を使用する場合は ここで指定できる選択肢がありますが 今回は多言語なので Automaticにしておきます
あとはTrainを押すだけで モデルの学習が始まります
学習で最も時間が掛かるのは 強力な埋め込みを テキストに適用する部分です その後 モデルはかなり高速に 高い精度で学習します
この時点で メッセージ例を 試すことができます
英語で…
あるいはスペイン語で
モデルは これが商用メッセージであると 確信しています 相乗効果の一例として このモデルは フランス語で学習していませんが フランス語のテキストも分類可能です
ですが 興味のある言語ごとに 学習データを用意することをおすすめします ここまではCreate MLを使ってきましたが NLContextualEmbeddingという 新しいクラスと 自然言語フレームワークを使って これらの埋め込みを扱うこともできます これにより 希望の埋め込みモデルを特定し そのプロパティを調べることができます たとえば 言語別やスクリプト別など 様々な方法で 埋め込みモデルを探すことができます 希望するモデルがあれば ベクトルや次元数などの プロパティを取得できます また 各モデルには識別子があります これはモデルを一意に識別できる文字列です たとえば あるモデルを使い始める際 言語によってモデルを探し 後になってそれと同じモデルを 使っているか確認したい場合 識別子によって識別可能になります ひとつ注意すべきは 他の多くの自然言語機能と同様に 埋め込みモデルは必要に応じてダウンロード されるアセットに依存している点です NLContextualEmbeddingは たとえば使用前にダウンロードを 要求するなど これらを制御するAPIを提供しています 指定された埋め込みモデルが 現在デバイス上で利用可能なアセットを 持っているか確認でき リクエストが無ければダウンロードされます 一部の方は Create MLではなく PyTorchやTensorFlowを使って 学習するモデルをお持ちかもしれません それでも新しいBERT埋め込みは 使えるでしょうか? 答えはイエスです 私たちは皆さんが学習させたい あらゆるモデルの 入力レイヤーとして使用できる 学習済みの多言語埋め込みモデルを 提供しています その仕組みを紹介します macOSデバイス上で NLContextualEmbeddingを使って 学習データの埋め込みベクトルを取得します そして PyTorchやTensorFlowを使った 学習の入力としてこれらをフィードし Core MLツールを使って 結果をCore MLモデルに変換します
そして デバイスでの推論時に NLContextualEmbeddingを使って 入力データの埋め込みベクトルを 取得し Core MLモデルに渡して出力します これをサポートするために NLContextualEmbedding APIが追加され モデルを読み込み それをテキストに適用し 埋め込みベクトルの結果を取得できます
先程のモデル識別子を覚えていれば それを使って学習に使用した 同じモデルを取り出すことができます そして このモデルをテキストに適用して NLContextualEmbeddingResult オブジェクトを取得できます オブジェクトを取得すると それを使って 埋め込みベクトルを反復処理できます では このモデルで出来ることの一例として 簡単なモデルを用意しました まず 既存の英語の Stable Diffusionモデルから始め 次に多言語データを使って 新しいBERT埋め込みを 入力レイヤーとして使うよう微調整し それを固定して さらに次元を変換するための単純な 線形射影レイヤーを学習します その結果 多言語入力の Stable Diffusionができます このモデルの出力例をいくつか紹介します たとえば 英語のテキストで “ピンクの花でいっぱいの庭の小道”と 入力すると モデルがピンクの花でいっぱいの庭に 通じる道へと導いてくれます また 同じ文章をフランス語 スペイン語 イタリア語 ドイツ語に翻訳すると モデルはそれぞれに対し ピンクの花で いっぱいの庭の画像を提供します もう少し複雑な例を紹介します “曇り空の下 木々と山々の前の道” こちらがモデルからの出力です 道路 木 山 雲が描かれています 同様に 同じ文章を フランス語 スペイン語 イタリア語 ドイツ語に翻訳したり 様々な他の言語に翻訳して 同じように各言語ごとに 道路 木 山 雲の画像を得ることができます では このセッションで 学んだことをまとめます Core MLを使用すると テキスト分類や 単語のタグ付けタスク用の モデルを簡単に学習できます 新しい多言語BERT埋め込みモデルは この目的を満たす 強力な入力エンコード層を提供します これらのモデルは単一言語 または多言語に対応できます また PyTorchやTensorFlowで学習したい モデルの入力層としてBERT埋め込みを 使用することもできます ご視聴ありがとうございます ぜひモデルのトレーニングを 試してみてください ♪ ♪
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。