私は名前付きエンティティ抽出のために事前計算されたMITIEモデルを使用しています。とにかく、あらかじめ訓練されたモデルを使用するのではなく、彼らの実際のモデルを見ることができますか?モデルはオープンソースとして利用可能ですか?物事を設定MITIE nerモデル
答えて
スタートからVS 2015> [すべてのアプリ]> [Visual Studio用:手始めに
を、あなたは が total_word_feature_extractor.dat と呼ばれるファイル内の巨大なダンプからの注釈付きテキストのコーパスを含むEnglish Language Modelをダウンロードすることができます。
その後、 GitからMITIE-Master Projectをダウンロード/複製してください。
Windows OSを実行している場合は、CMakeをダウンロードしてください。
x64ベースのWindows OSを実行している場合は、Visual Studio 2015 Community EditionをC++コンパイラ用にインストールします。
上記をダウンロードした後、すべてをフォルダに展開します。
オープンデベロッパーのコマンドプロンプト、およびツールのフォルダに移動し、あなたが内部の5つのサブフォルダが表示されます。
次のステップでは、Visual Studioデベロッパーコマンドプロンプトでコマンドを次のようにCMakeを使用することにより、ner_conll、ner_stream、train_freebase_relation_detectorとwordrepパッケージを構築することです。
このような何か:ner_conllについては
:については
cd "C:\Users\xyz\Documents\MITIE-master\tools\ner_conll"
i)がmkdir build
II)cd build
III)cmake -G "Visual Studio 14 2015 Win64" ..
IV)cmake --build . --config Release --target install
ner_stream:train_freebase_relation_detectorについて
cd "C:\Users\xyz\Documents\MITIE-master\tools\ner_stream"
i)はmkdir build
II)cd build
III)cmake -G "Visual Studio 14 2015 Win64" ..
IV)cmake --build . --config Release --target install
:
cd "C:\Users\xyz\Documents\MITIE-master\tools\train_freebase_relation_detector"
i)はmkdir build
II)cd build
III)cmake -G "Visual Studio 14 2015 Win64" ..
IV)wordrepについてはcmake --build . --config Release --target install
を:
cd "C:\Users\xyz\Documents\MITIE-master\tools\wordrep"
i)はmkdir build
II)cd build
III)cmake -G "Visual Studio 14 2015 Win64" ..
IV)cmake --build . --config Release --target install
あなたがそれらを構築した後、あなたは、いくつかの150-160の警告を取得します、心配しないでください。今
、手動でテキストに注釈を付けるためのVisual Studioのコードを使用して、このような何かJSONファイル「data.json」を作る"C:\Users\xyz\Documents\MITIE-master\examples\cpp\train_ner"
に移動します。あなたがより多くの発話や注釈を追加することができます
{
"AnnotatedTextList": [
{
"text": "I want to travel from New Delhi to Bangalore tomorrow.",
"entities": [
{
"type": "FromCity",
"startPos": 5,
"length": 2
},
{
"type": "ToCity",
"startPos": 8,
"length": 1
},
{
"type": "TimeOfTravel",
"startPos": 9,
"length": 1
}
]
}
]
}
をそれらのトレーニングデータが多いほど、予測精度が向上します。
この注釈付きJSONは、jQueryやAngularなどのフロントエンドツールを使用して作成することもできます。しかし簡潔にするために私は手でそれらを作りました。
ここで、Annotated JSONファイルを解析して、ner_training_instanceのadd_entityメソッドに渡します。
しかし、C++ではJSONを逆シリアル化するためのリフレクションはサポートされていないため、このライブラリRapid JSON Parserを使用することができます。 Gitページからパッケージをダウンロードし、"C:\Users\xyz\Documents\MITIE-master\mitielib\include\mitie"
の下に置きます。
train_ner_example.cppファイルをカスタマイズして、注釈付きカスタムエンティティJSONを解析し、トレーニングするためにMITIEに渡す必要があります。
#include "mitie\rapidjson\document.h"
#include "mitie\ner_trainer.h"
#include <iostream>
#include <vector>
#include <list>
#include <tuple>
#include <string>
#include <map>
#include <sstream>
#include <fstream>
using namespace mitie;
using namespace dlib;
using namespace std;
using namespace rapidjson;
string ReadJSONFile(string FilePath)
{
ifstream file(FilePath);
string test;
cout << "path: " << FilePath;
try
{
std::stringstream buffer;
buffer << file.rdbuf();
test = buffer.str();
cout << test;
return test;
}
catch (exception &e)
{
throw std::exception(e.what());
}
}
//Helper function to tokenize a string based on multiple delimiters such as ,.;:- or whitspace
std::vector<string> SplitStringIntoMultipleParameters(string input, string delimiter)
{
std::stringstream stringStream(input);
std::string line;
std::vector<string> TokenizedStringVector;
while (std::getline(stringStream, line))
{
size_t prev = 0, pos;
while ((pos = line.find_first_of(delimiter, prev)) != string::npos)
{
if (pos > prev)
TokenizedStringVector.push_back(line.substr(prev, pos - prev));
prev = pos + 1;
}
if (prev < line.length())
TokenizedStringVector.push_back(line.substr(prev, string::npos));
}
return TokenizedStringVector;
}
//Parse the JSON and store into appropriate C++ containers to process it.
std::map<string, list<tuple<string, int, int>>> FindUtteranceTuple(string stringifiedJSONFromFile)
{
Document document;
cout << "stringifiedjson : " << stringifiedJSONFromFile;
document.Parse(stringifiedJSONFromFile.c_str());
const Value& a = document["AnnotatedTextList"];
assert(a.IsArray());
std::map<string, list<tuple<string, int, int>>> annotatedUtterancesMap;
for (int outerIndex = 0; outerIndex < a.Size(); outerIndex++)
{
assert(a[outerIndex].IsObject());
assert(a[outerIndex]["entities"].IsArray());
const Value &entitiesArray = a[outerIndex]["entities"];
list<tuple<string, int, int>> entitiesTuple;
for (int innerIndex = 0; innerIndex < entitiesArray.Size(); innerIndex++)
{
entitiesTuple.push_back(make_tuple(entitiesArray[innerIndex]["type"].GetString(), entitiesArray[innerIndex]["startPos"].GetInt(), entitiesArray[innerIndex]["length"].GetInt()));
}
annotatedUtterancesMap.insert(pair<string, list<tuple<string, int, int>>>(a[outerIndex]["text"].GetString(), entitiesTuple));
}
return annotatedUtterancesMap;
}
int main(int argc, char **argv)
{
try {
if (argc != 3)
{
cout << "You must give the path to the MITIE English total_word_feature_extractor.dat file." << endl;
cout << "So run this program with a command like: " << endl;
cout << "./train_ner_example ../../../MITIE-models/english/total_word_feature_extractor.dat" << endl;
return 1;
}
else
{
string filePath = argv[2];
string stringifiedJSONFromFile = ReadJSONFile(filePath);
map<string, list<tuple<string, int, int>>> annotatedUtterancesMap = FindUtteranceTuple(stringifiedJSONFromFile);
std::vector<string> tokenizedUtterances;
ner_trainer trainer(argv[1]);
for each (auto item in annotatedUtterancesMap)
{
tokenizedUtterances = SplitStringIntoMultipleParameters(item.first, " ");
mitie::ner_training_instance *currentInstance = new mitie::ner_training_instance(tokenizedUtterances);
for each (auto entity in item.second)
{
currentInstance -> add_entity(get<1>(entity), get<2>(entity), get<0>(entity).c_str());
}
// trainingInstancesList.push_back(currentInstance);
trainer.add(*currentInstance);
delete currentInstance;
}
trainer.set_num_threads(4);
named_entity_extractor ner = trainer.train();
serialize("new_ner_model.dat") << "mitie::named_entity_extractor" << ner;
const std::vector<std::string> tagstr = ner.get_tag_name_strings();
cout << "The tagger supports " << tagstr.size() << " tags:" << endl;
for (unsigned int i = 0; i < tagstr.size(); ++i)
cout << "\t" << tagstr[i] << endl;
return 0;
}
}
catch (exception &e)
{
cerr << "Failed because: " << e.what();
}
}
add_entityは3つのパラメータ、ベクトル、カスタムエンティティタイプ名、文章中の単語の開始インデックスと単語の範囲とすることができるトークン化文字列を受け付けます。
これで、開発者コマンドプロンプトVisual Studioで次のコマンドを使用してner_train_example.cppをビルドする必要がありました。
1)cd "C:\Users\xyz\Documents\MITIE-master\examples\cpp\train_ner"
2)mkdir build
3)cd build
4)cmake -G "Visual Studio 14 2015 Win64" ..
5)cmake --build . --config Release --target install
6)cd Release
7)train_ner_example "C:\\Users\\xyz\\Documents\\MITIE-master\\MITIE-models\\english\\total_word_feature_extractor.dat" "C:\\Users\\xyz\\Documents\\MITIE-master\\examples\\cpp\\train_ner\\data.json"
正常上記を実行する上で、我々はnew_ner_model.datを取得しますファイルは、私たちの発話のシリアライズされ訓練されたバージョンです。
この.datファイルは、RASAに渡すことも、スタンドアロンで使用することもできます。 RASAにそれを渡すために
:
次のようにconfig.jsonファイルを作成します。
{
"project": "demo",
"path": "C:\\Users\\xyz\\Desktop\\RASA\\models",
"response_log": "C:\\Users\\xyz\\Desktop\\RASA\\logs",
"pipeline": ["nlp_mitie", "tokenizer_mitie", "ner_mitie", "ner_synonyms", "intent_entity_featurizer_regex", "intent_classifier_mitie"],
"data": "C:\\Users\\xyz\\Desktop\\RASA\\data\\examples\\rasa.json",
"mitie_file" : "C:\\Users\\xyz\\Documents\\MITIE-master\\examples\\cpp\\train_ner\\Release\\new_ner_model.dat",
"fixed_model_name": "demo",
"cors_origins": ["*"],
"aws_endpoint_url": null,
"token": null,
"num_threads": 2,
"port": 5000
}
- 1. スタンフォードNLP - NER&モデル
- 2. NER英語モデル
- 3. Spacy NERモデルの評価
- 4. MITIEライブラリfor NLP
- 5. スタンフォードにモデルを読み込むNER
- 6. スタンフォードcorenlpでcaseless NERモデルをトレーニング
- 7. スタンフォードnlpでのNERモデルのトレーニング
- 8. 'en'モデルのNERタイプはありますか?
- 9. カスタマイズされたNERモデルを使用したスタンフォードOpenIE
- 10. カスタムコーパスを使用したNLTKのNERモデルの学習
- 11. SpaCy v1.1.2に以前保存されたNERモデルをロードする
- 12. CRFモデルはNER Annotatorとしてロードできますか?
- 13. スタンフォードNER - MISCエンティティ?
- 14. Spacy 2.0 NER Training
- 15. スタンフォードNER小文字
- 16. スタンフォードNLP - NER - 複数のトークンを持つ名前の列車NER
- 17. 時間と場所の表現を解析するためのNERモデル
- 18. RASA NLUのWindowsにMITIE NLPをインストールするには?
- 19. Linear CRFとWord2Vec for NER
- 20. タグ付けとトレーニングNERデータセット
- 21. スタンフォードの位置情報NER
- 22. リニアチェーン条件付きランダムフィールドシーケンスモデル - NER
- 23. NER、NERC、NELの相違点
- 24. openNLP java-multi termポルトガル語NER
- 25. スタンフォードNERクラシファイア改行問題
- 26. Mallet for NERの使い方
- 27. SpaCy NERのトレーニングデータセットをフォーマットする
- 28. スタンフォードNERのフレーズまたはコンパウンドエンティティ
- 29. Named Entity Recognition(Ner) - 組織名データベース
- 30. スタンフォードNER、出力エンコーディングの問題