Easy-Bertは、PythonとJavaでGoogleの高品質のBert言語モデルを使用するための死んだシンプルなAPIです。
現在、Easy-Bertは、PythonとJavaの両方で事前に訓練されたBertモデルから埋め込みを取得することに焦点を合わせています。 Pythonでの微調整と事前トレーニングのサポートは、将来的に追加され、埋め込みを取得する以外に他のタスクにEasy-Bertを使用するサポートが追加されます。
Easy-BertはPypiで利用できます。 pip install easybertまたはpip install git+https://github.com/robrua/easy-bert.gitでインストールできます。
Tensorflow Hubの事前に訓練されたBERTモデルを使用して、またはTensorflow保存モデル形式のローカルモデルでEasy-Bertを使用できます。
Tensowflow HubモデルからBert Embedderを作成するには、ターゲットTF-Hub URLを使用してBertオブジェクトをインスタンス化するだけです。
from easybert import Bert
bert = Bert ( "https://tfhub.dev/google/bert_multi_cased_L-12_H-768_A-12/1" )また、 Bert.loadを使用して、Tensorflowの保存されたモデル形式でローカルモデルをロードすることもできます。
from easybert import Bert
bert = Bert . load ( "/path/to/your/model/" ) BERTモデルをロードしたら、 bert.embedを使用してシーケンスエンボードを取得できます。
x = bert . embed ( "A sequence" )
y = bert . embed ([ "Multiple" , "Sequences" ])トークンあたりの埋め込みが必要な場合は、 per_token=Trueを設定できます。
x = bert . embed ( "A sequence" , per_token = True )
y = bert . embed ([ "Multiple" , "Sequences" ], per_token = True )Easy-Bertは、Bert Embeddingsをnumpy配列として返します
bert.embed電話するたびに、新しいTensorflowセッションが作成され、計算に使用されます。 bert.embed順番に呼び出している場合は、 withを使用して次のような呼び出しを使用して、Tensorflowセッションを共有することでコードをスピードアップできます。
with bert :
x = bert . embed ( "A sequence" , per_token = True )
y = bert . embed ([ "Multiple" , "Sequences" ], per_token = True ) bert.saveを使用してbertモデルを保存してから、後でBert.loadを使用してリロードできます。
bert . save ( "/path/to/your/model/" )
bert = Bert . load ( "/path/to/your/model/" )Easy-Bertは、Bertを使用してシーケンスの1回限りの埋め込みを便利に行うためのCLIツールも提供します。また、Tensorflow Hubモデルを保存されたモデルに変換することもできます。
bert --help 、 bert embed --helpまたはbert download --helpを実行して、CLIツールの詳細を取得します。
Easy-Bertには、Bert Embeddingsに依存しているアプリケーションのベース画像として、または環境をインストールする必要なくCLIツールを実行するためのベースイメージとして使用できるDockerビルドが付属しています。
Easy-BertはMaven Centralで利用できます。また、リリースページから配布されています。
Mavenプロジェクトに最新のEasy-Bertリリースバージョンを追加するには、 pom.xml依存関係に依存関係を追加します。
< dependencies >
< dependency >
< groupId >com.robrua.nlp</ groupId >
< artifactId >easy-bert</ artifactId >
< version >1.0.3</ version >
</ dependency >
</ dependencies >または、最新の開発バージョンを取得したい場合は、sonaypeスナップショットリポジトリもpom.xmlに追加します。
< dependencies >
< dependency >
< groupId >com.robrua.nlp</ groupId >
< artifactId >easy-bert</ artifactId >
< version >1.0.4-SNAPSHOT</ version >
</ dependency >
</ dependencies >
< repositories >
< repository >
< id >snapshots-repo</ id >
< url >https://oss.sonatype.org/content/repositories/snapshots</ url >
< releases >
< enabled >false</ enabled >
</ releases >
< snapshots >
< enabled >true</ enabled >
</ snapshots >
</ repository >
</ repositories >Easy-BertのPythonツールで生成された事前に訓練されたBERTモデルでEasy-Bertを使用できます。 Maven Centralで事前に生成されたモデルを使用することもできます。
ローカルファイルシステムからモデルをロードするには、以下を使用できます。
try ( Bert bert = Bert . load ( new File ( "/path/to/your/model/" ))) {
// Embed some sequences
}モデルがClassPathにある場合(たとえば、Maven経由でそれを引いている場合)、使用できます。
try ( Bert bert = Bert . load ( "/resource/path/to/your/model" )) {
// Embed some sequences
} BERTモデルをロードしたら、 bert.embedSequenceまたはbert.embedSequencesを使用してシーケンス埋め込みを取得できます。
float [] embedding = bert . embedSequence ( "A sequence" );
float [][] embeddings = bert . embedSequences ( "Multiple" , "Sequences" );トークンあたりの埋め込みが必要な場合は、 bert.embedTokens使用できます。
float [][] embedding = bert . embedTokens ( "A sequence" );
float [][][] embeddings = bert . embedTokens ( "Multiple" , "Sequences" );さまざまなTensorflow Hub Bertモデルは、Maven CentralのEasy-Bert形式で利用できます。プロジェクトで1つを使用するには、 pom.xmlに次のものを追加し、 artifactIdのARTIFACT-IDの代わりに以下にリストされているアーティファクトIDの1つを置き換えます。
< dependencies >
< dependency >
< groupId >com.robrua.nlp.models</ groupId >
< artifactId >ARTIFACT-ID</ artifactId >
< version >1.0.0</ version >
</ dependency >
</ dependencies >依存関係を取り入れたら、このコードを使用してモデルをロードできます。依存関係として追加したモデルに基づいて、 RESOURCE-PATHの代わりに下のリストから適切なリソースパスを置き換えます。
try ( Bert bert = Bert . load ( "RESOURCE-PATH" )) {
// Embed some sequences
}| モデル | 言語 | レイヤー | 埋め込みサイズ | 頭 | パラメーター | アーティファクトID | リソースパス |
|---|---|---|---|---|---|---|---|
| バートベース、覆われています | 英語 | 12 | 768 | 12 | 110m | Easy-Bert-Uncased-L-12-H-768-A-12 | com/robrua/nlp/easy-bert/bert-uncased-l-12-h-768-a-12 |
| バートベース、ケース | 英語 | 12 | 768 | 12 | 110m | Easy-Bert-Cased-L-12-H-768-A-12 | com/robrua/nlp/easy-bert/bert-cased-l-12-h-768-a-12 |
| バートベース、多言語ケース | 104言語 | 12 | 768 | 12 | 110m | Easy-Bert-Multi-Cased-L-12-H-768-A-12 | com/robrua/nlp/easy-bert/bert-multi-cased-l-12-h-768-a-12 |
| バートベース、中国語 | 中国語が簡素化され、伝統的です | 12 | 768 | 12 | 110m | Easy-Bert-Chinese-L-12-H-768-A-12 | com/robrua/nlp/easy-bert/bert-chinese-l-12-h-768-a-12 |
今のところ、Easy-Bertは、Pythonツールを使用して変換された事前に訓練されたTensorflow Hub Bertモデルのみを使用できます。微調整と事前トレーニングの新しいモデルのサポートを簡単に追加しますが、Java側でこれらをサポートする計画はありません。 Pythonでトレーニングし、モデルを保存してから、Javaにロードする必要があります。
バグが見つかった場合は、プルリクエストや問題を介してお知らせください。
研究にEasy-Bertを使用した場合は、プロジェクトを引用してください。