Извлечение информации из Массачусетского технологического института

искусственный интеллект Python GitHub Java
Извлечение информации из Массачусетского технологического института

MITIE

MITIE — это библиотека для извлечения информации и инструмент, выпущенный командой НЛП Массачусетского технологического института. Это бесплатный расширенный инструмент извлечения информации, который в настоящее время включает в себя извлечение именованных сущностей, обнаружение бинарных взаимосвязей и инструменты для обучения пользовательских экстракторов и детекторов взаимосвязей.

MITIE заключается в том, что основной код написан на C++ и построен на высокопроизводительной библиотеке машинного обучения dlib. Команда Массачусетского технологического института предоставила нам несколько предварительно обученных моделей, включая английский, испанский и немецкий языки, которые были обучены на большом количестве корпусов. Мы обнаружили, что нам не нужна китайская модель, поэтому ее нужно обучать самим.

Хотя MITIE написан на C++, он также предоставляет API для вызова других языков. В моих собственных проектах он часто смешивается с Java и Python, поэтому он очень удобен, пока он скомпилирован в динамическую библиотеку и вызывается соответственно с Java и Python.

Почему появляется MITIE

Просто посмотрите, что говорят люди из MIT Labs.

I work at a lab and there are a lot of cool things about my job. In fact, I could go on all day about it, but in this post I want to talk about one thing in particular, which is that we recently got funded by the program to make an open source natural language processing library focused on information extraction.

Why make such a thing when there are already open source libraries out there for this (e.g. OpenNLP, NLTK, Stanford IE, etc.)? Well, if you look around you quickly find out that everything which exists is either expensive, not state-of-the-art, or GPL licensed. If you wanted to use this kind of NLP tool in a non-GPL project then you are either out of luck, have to pay a lot of money, or settle for something of low quality. Well, not anymore! We just released the first version of our MIT Information Extraction library which is built using state-of-the-art statistical machine learning tools.

как пользоваться

Взяв в качестве примера извлечение сущностей, вы можете напрямую использовать модель, предоставленную MITIE, для удобства, в противном случае вам придется обучать ее самостоятельно. отGitHub.com/Peach-NLP/MIT…скачать.

Затем создайте файл test.txt, содержимое для тестирования

I met with john becker at HBU.
The other day at work I saw Brian Smith from CMU.

Наконец, напишите код следующим образом:

#include <mitie/named_entity_extractor.h>
#include <mitie/conll_tokenizer.h>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdlib>

using namespace std;
using namespace mitie;

std::vector<string> tokenize_file (
    const string& filename
)
{
    ifstream fin(filename.c_str());
    if (!fin)
    {
        cout << "Unable to load input text file" << endl;
        exit(EXIT_FAILURE);
    }
    conll_tokenizer tok(fin);
    std::vector<string> tokens;
    string token;
    while(tok(token))
        tokens.push_back(token);

    return tokens;
}


int main(int argc, char** argv)
{
    try
    {
        if (argc != 3)
        {
            printf("You must give a MITIE ner model file as the first command line argument\n");
            printf("followed by a text file to process.\n");
            return EXIT_FAILURE;
        }
        string classname;
        named_entity_extractor ner;
        dlib::deserialize(argv[1]) >> classname >> ner;

        const std::vector<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 << "   " << tagstr[i] << endl;

        std::vector<string> tokens = tokenize_file(argv[2]);

        std::vector<pair<unsigned long, unsigned long> > chunks;
        std::vector<unsigned long> chunk_tags;
        std::vector<double> chunk_scores;

        ner.predict(tokens, chunks, chunk_tags, chunk_scores);

        cout << "\nNumber of named entities detected: " << chunks.size() << endl;
        for (unsigned int i = 0; i < chunks.size(); ++i)
        {
            cout << "   Tag " << chunk_tags[i] << ": ";
            cout << "Score: " << fixed << setprecision(3) << chunk_scores[i] << ": ";
            cout << tagstr[chunk_tags[i]] << ": ";
            for (unsigned long j = chunks[i].first; j < chunks[i].second; ++j)
                cout << tokens[j] << " ";
            cout << endl;
        }

        return EXIT_SUCCESS;
    }
    catch (std::exception& e)
    {
        cout << e.what() << endl;
        return EXIT_FAILURE;
    }
}

Результат выполнения таков,

The tagger supports 4 tags:
   PERSON
   LOCATION
   ORGANIZATION
   MISC

Number of named entities detected: 4
   Tag 0: Score: 1.532: PERSON: john becker
   Tag 2: Score: 0.340: ORGANIZATION: HBU
   Tag 0: Score: 1.652: PERSON: Brian Smith
   Tag 2: Score: 0.471: ORGANIZATION: CMU

обучение китайской модели

Основная цель состоит в том, чтобы обучить все свойства вектора слова. На нем основана модель сущностей с реальным именем и реляционная модель. MITIE предоставляет нам инструменты для выполнения вышеуказанных операций. Мы можем использовать cmake для создания vs-проектов, но обычно мы этого не делаем. нужно изменить их на код, вы можете использовать его сразу после сборки с помощью cmake. Основные операции

D:\MITIE\tools\wordrep>mkdir build
D:\MITIE\tools\wordrep>cd build
D:\MITIE\tools\wordrep\build>cmake ..
D:\MITIE\tools\wordrep\build>cmake --build . --config Release

Другой — собрать большой словарный запас, который можно собрать через Википедию и Baidu Baike.Подобную обработку можно найти в предыдущей статье «Как использовать китайский корпус Википедии».

Затем можно приступать к обучению.Параметр e означает генерировать все нужные нам модели, а data – каталог корпуса.

wordrep -e data
if (parser.option("e"))
        {
            count_words(parser);
            word_vects(parser);
            basic_morph(parser);
            cca_morph(parser);
            return 0;
        }

вызов Java и Python

Основным шагом является создание общей библиотеки ссылок, которую также можно легко создать с помощью cmake, в каталог mitielib,

D:\MITIE\mitielib>mkdir build
D:\MITIE\mitielib>cd build
D:\MITIE\mitielib\build>cmake ..
D:\MITIE\mitielib\build>cmake --build . --config Release --target install

Создайте необходимую библиотеку ссылок.

-- Install configuration: "Release"
-- Installing: D:/MITIE/mitielib/msvcp140.dll
-- Installing: D:/MITIE/mitielib/vcruntime140.dll
-- Installing: D:/MITIE/mitielib/concrt140.dll
-- Installing: D:/MITIE/mitielib/mitie.lib
-- Installing: D:/MITIE/mitielib/mitie.dll

Тогда python может легко завершить вызов. Для Java требуется аналогичная операция, но процесс сборки также требует SWIG. Создайте следующую библиотеку ссылок и пакет jar, после чего Java сможет легко завершить вызов.

-- Install configuration: "Release"
-- Installing: D:/MITIE/mitielib/java/../javamitie.dll
-- Installing: D:/MITIE/mitielib/java/../javamitie.jar
-- Up-to-date: D:/MITIE/mitielib/java/../msvcp140.dll
-- Up-to-date: D:/MITIE/mitielib/java/../vcruntime140.dll
-- Up-to-date: D:/MITIE/mitielib/java/../concrt140.dll

github

Проект анализа текста с использованием MITIE,GitHub.com/sea-boateng/TE…

Ниже приведенырекламировать

========Время рекламы========

Моя новая книга «Анализ дизайна ядра Tomcat» продана на Jingdong, нуждающиеся друзья могут перейти кitem.JD.com/12185360.Контракт…Зарезервировать. Спасибо друзья.

Зачем писать «Анализ проектирования ядра Tomcat»

=========================

Добро пожаловать, чтобы следовать:

这里写图片描述
напишите сюда описание фото

这里写图片描述
напишите сюда описание фото