Ich habe auf die Verwendung von vortrained MITIE-Modelle für named Entity Extraction erforscht. Gibt es überhaupt einen Blick auf ihr aktuelles Modell, anstatt ein vortrainiertes Modell zu verwenden? Ist das Modell als Open Source verfügbar?MITIE ner Modell
Antwort
Einstellung Dinge:
Für den Anfang können Sie die English Language Model herunterladen, die enthält Corpus kommentierter Text aus einer riesigen Müllkippe in einer Datei namens total_word_feature_extractor.dat.
Danach herunterladen/Klonen Sie die MITIE-Master Project von ihrem offiziellen Git.
Wenn Sie Windows OS ausführen, laden Sie CMake herunter.
Wenn Sie ein x64-basiertes Windows-O.S ausführen, installieren Sie Visual Studio 2015 Community Edition für den C++ - Compiler.
Nach dem Herunterladen, die oben genannten, extrahieren alle von ihnen in einen Ordner.
Öffnen Prompt Entwickler Befehl für VS 2015 von Start> Alle Apps> Visual Studio, und navigieren Sie zu dem Ordner Tools, werden Sie 5 Unterordner innen sehen.
Der nächste Schritt ist ner_conll, ner_stream, train_freebase_relation_detector und wordrep Pakete zu erstellen, indem Sie Cmake-Befehle in der Visual Studio Developer Eingabeaufforderung.
Etwas wie folgt:
Für 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
Für ner_stream:
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
Für train_freebase_relation_detector:
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" ..
0.123.iv) cmake --build . --config Release --target install
Für wordrep:
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
Nachdem Sie sie bauen Sie einige 150-160 Warnungen erhalten, Mach dir keine Sorgen.
Navigieren Sie nun zu dem "C:\Users\xyz\Documents\MITIE-master\examples\cpp\train_ner"
eine JSON-Datei "data.json" Machen Sie mit Visual Studio-Code für Text mit Anmerkungen versehen manuell, etwa so:
{
"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
}
]
}
]
}
Sie können weitere Äußerungen hinzufügen und mit Anmerkungen versehen Je höher die Trainingsdaten, desto besser ist die Vorhersagegenauigkeit.
Dieser mit Anmerkungen versehene JSON kann auch über Front-End-Tools wie jQuery oder Angular erstellt werden. Aber um es kurz zu machen, habe ich sie von Hand erstellt.
Jetzt, um die unsere Annotated JSON-Datei zu analysieren und sie an add_entity-Methode von ner_training_instance übergeben.
Aber C++ unterstützt keine Reflektion zum Deserialisieren von JSON, deshalb können Sie diese Bibliothek verwenden Rapid JSON Parser. Laden Sie das Paket von der Git-Seite herunter und legen Sie es unter "C:\Users\xyz\Documents\MITIE-master\mitielib\include\mitie"
ab.
Jetzt müssen wir die Datei train_ner_example.cpp anpassen, um unsere kommentierten benutzerdefinierten Entitäten JSON analysieren und an MITIE weiterleiten zu können.
#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();
}
}
Die add_entity akzeptiert 3 Parameter, die in Zeichen übersetzte Zeichenfolge, die ein Vektor sein kann, die benutzerdefinierte Entität Typname, der Startindex eines Wortes in einem Satz und der Bereich des Wortes.
Nun müssen wir die ner_train_example.cpp mit den folgenden Befehlen in Developer Command Prompt Visual Studio erstellen.
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"
Auf erfolgreich die obigen Ausführung werden wir eine new_ner_model.dat erhalten Datei, die eine serialisierte und trainierte Version unserer Äußerungen ist.
Jetzt kann diese .dat-Datei an RASA übergeben oder eigenständig verwendet werden.
Denn es RASA vorbei:
die config.json Datei Machen Sie wie folgt vor:
{
"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. NER Englisch Modell
- 2. Modell wird geladen in Stanford NER
- 3. Training NER-Modell in Stanford-NLP
- 4. Stanford OpenIE mit benutzerdefinierten NER-Modell
- 5. MITIE-Bibliothek für NLP
- 6. Stanford NER Kleinbuchstaben Entities
- 7. Lineares kettenbedingtes Zufallsfeldsequenzmodell - NER
- 8. Fehler beim Ausführen von Stanford NER Modell 3.6.0
- 9. Training NER-Modell zum Auswerten von Zeit- und Ortsausdrücken
- 10. Stanford Ner: mein eigenes Modell bauen oder RegexNer verwenden?
- 11. Train NER-Modell in NLTK mit benutzerdefinierten Korpus
- 12. Wie setze ich Whitespace-Tokenizer auf NER-Modell?
- 13. Spacy 2.0 NER Training
- 14. Stanford NER Classifier Zeilenvorschub Ausgabe
- 15. Stanford NER - MISC Einheit?
- 16. Standortinformation in Stanford NER
- 17. Lineare CRF Versus Word2Vec für NER
- 18. Anzahl der Tags von NER
- 19. Use Case für NER Bibliotheken
- 20. openNLP Java - Multiterm Portugiesisch NER
- 21. Stanford NER - Nicht identifizierbar Telefonnummer
- 22. Focused Named Entity Recognition (NER)?
- 23. Wie installiert man MITIE NLP unter Windows für RASA NLU?
- 24. Benutzerdefiniertes NER-Modell extrahiert Teilzeichenfolge des für das Training verwendeten Schlüsselworts
- 25. Wie trainiert man einen französischen NER basierend auf dem stanford-nlp Conditional Random Fields Modell?
- 26. Stanford NLP - NER - Zug NER mit Namen, die mehrere Token haben
- 27. NER, um benutzerdefinierte Entitäten zu erkennen
- 28. Unterschied zwischen NER, NERC und NEL
- 29. Stanford NER nicht Datum und Uhrzeit Tag
- 30. Kann NER Stanford in Java-Datei aufgerufen?