Недавно я начал новый проект по созданию системы контроля качества для Mindvalley. После короткого обсуждения с моими коллегами мы решили использовать победителя риска 2011 г. (Watson). Как вы, возможно, знаете, Watson - это компьютерная система с ответами на вопросы, способная отвечать на вопросы, заданные на естественном языке. Она была разработана в рамках проекта IBM DeepQA исследовательской группой под руководством главного исследователя Дэвида Ферруччи.
IBM также выпустила свою облачную платформу IBM Bluemix в 2014 году. Она поддерживает несколько языков программирования и сервисов, а также интегрированный DevOps для создания, запуска, развертывания и управления приложениями в облаке. И, конечно же, Watson API доступны на платформе Bluemix.
Прежде чем вы начнете
Перед тем, как начать, вам понадобятся следующие детали
- Вам необходима учетная запись Bluemix
- Node.js
- Python
Обзор системы ответов на вопросы
Конечная цель проста; проектировать и разрабатывать приложение уметь:
- Анализируйте неструктурированные данные
- Понимает сложные вопросы
- Представляет ответы и решение
Но, к сожалению, это не так просто, как заявляет IBM. Раньше IBM предлагала IBM Watson Question and Answer (QA), но летом 2015 года эта услуга была заменена четырьмя новыми услугами для поддержки настройки и встраивания приложений вопросов и ответов.
Для различных типов вопросов и ответов рекомендуются четыре заменяющих сервиса. :
Классификатор естественного языка; позволяет с уверенностью интерпретировать и классифицировать естественный язык.
Диалог; позволяет написать сценарий разговора и помочь пользователю пройти через процесс
Получить и ранжировать; позволяет извлекать информацию с помощью модели машинного обучения
Конвертация документов; берет документы и "разбивает их" на более мелкие блоки ответов, чтобы вернуть их в виде отрывков
в зависимости от ваших входных данных и требований вы можете выбрать одну или комбинацию этих услуг для создания всеобъемлющей и надежной системы.
Мой подход
Я решаю использовать комбинацию Document Conversion
и Retrieve and Rank
Сервисов. Служба преобразования документов, используемая для преобразования документов в Answer Units
и использования их в качестве входных данных для обучения службы получения и ранжирования.
Подготовка платформы Bluemix
Прежде чем мы начнем, вам необходимо подготовить и настроить свой сервер и сервисы. Я также решил развернуть свой код в Bluemix, однако вы можете просто создать свой API в bluemix и развернуть свой код где угодно (AWS :))
Войдите в свою учетную запись Bluemix, на панели управления нажмите Service and APIs
, вам нужно создать две службы Document Conversion
и Retrieve and Rank
, скопировать и вставить учетные данные. (это довольно просто, я не буду это объяснять)
Подготовка документов
Первый и самый важный шаг - подготовка документа. Чем дисциплинированнее вы обрабатываете данные, тем более последовательных и лучших результатов вы, вероятно, достигнете. Служба Watson Document Conversion поможет вам в этом процессе, поэтому вам не нужно делать это вручную, но нам нужно подготовить наш документ для службы DC. Вы спросите, а как оформить документ? ответ заключается в предоставлении соответствующего вопроса в качестве заголовка каждого абзаца. Служба DC чувствительна к заголовкам, она преобразует документ в формат json, который содержит список answer_units
словарей. посмотрите на следующий пример;
- Образец документа
What is Watson? Watson is an artificially intelligent computer system capable of answering questions posed in natural language, developed in IBM's DeepQA project by a research team led by principal investigator David Ferrucci. Watson was named after IBM's first CEO and industrialist Thomas J. Watson. The computer system was specifically developed to answer questions on the quiz show Jeopardy! In 2011, Watson competed on Jeopardy! against former winners Brad Rutter and Ken Jennings. Watson received the first place prize of $1 million. How did it Work? Watson had access to 200 million pages of structured and unstructured content consuming four terabytes of disk storage including the full text of Wikipedia, but was not connected to the Internet during the game. For each clue, Watson's three most probable responses were displayed on the television screen. Watson consistently outperformed its human opponents on the game's signaling device, but had trouble responding to a few categories, notably those having short clues containing only a few words. And then, what happened? In February 2013, IBM announced that Watson software system's first commercial application would be for utilization management decisions in lung cancer treatment at Memorial Sloan–Kettering Cancer Center in conjunction with health insurance company WellPoint. IBM Watson's former business chief Manoj Saxena says that 90% of nurses in the field who use Watson now follow its guidance.
- Единицы ответа
Теперь мы можем использовать список блоков ответов для тренировки системы Retrieve и Rank.
Настройка системы получения и ранжирования
Эта служба помогает пользователям находить наиболее релевантную информацию по их запросу, используя комбинацию алгоритмов поиска и машинного обучения для обнаружения «сигналов» в данных. Созданные на основе Apache Solr, разработчики загружают свои данные в службу, обучают модель машинного обучения на основе известных релевантных результатов, а затем используют эту модель для предоставления улучшенных результатов своим конечным пользователям на основе их вопроса или запроса.
Давай запачкаем руки. Если вы раньше работали с Solr, возможно, вы знаете, что нам нужны наш кластер и коллекция для индексации данных, поэтому давайте настроим их. Я использовал Node.js для этого проекта, прежде чем вы начнете, вам необходимо установить клиентскую библиотеку Node для использования Watson Облачные сервисы для разработчиков, набор REST API и SDK, которые используют когнитивные вычисления для решения сложных проблем. npm install watson-developer-cloud --save
следующий и последний предварительный шаг - это создание файла conf;
- Создать кластер
Чтобы использовать службу Retrieve and Rank, вы должны создать кластер Solr. Кластер Solr управляет вашими поисковыми коллекциями, которые вы создадите позже.
2. Загрузить конфигурацию Solr
Ответ включает cluster_id
и состояние кластера availability
. Кластер должен быть готов, прежде чем вы сможете его использовать. подготовка занимает около нескольких минут, но вы можете проверить статус через API.
После того, как кластер будет готов, но прежде чем вы сможете создавать коллекции, вам необходимо настроить кластер. Конфигурация Solr определяет, как индексировать документы, чтобы вы могли выполнять поиск в важных полях. вы можете скачать образец конфигурации solr здесь, я могу написать отдельный пост о последней конфигурации. вы можете загрузить одну или несколько конфигураций в службу поиска и ранжирования.
3. Создать коллекцию
Коллекция Solr - это логический индекс данных в ваших документах. Коллекция - это способ хранить данные отдельно в облаке. вам необходимо назначить одну из загруженных конфигураций вашей коллекции.
4. Индексирование (добавление) документов
Теперь все готово для индексации (добавления) вопросов и ответов, сгенерированных службой Преобразование документов в коллекцию.
5. Создавайте основную истину. Основополагающая истина - это набор вопросов, на которые есть ответы. Для службы "Получить и ранжировать" вы помечаете ответы, как их отношение к вопросу. Метка релевантности помогает составителю ранжирования определить, какие функции наиболее полезны. Вопросы, ответы и метки релевантности объединяются для создания обучающих данных. нам нужно загрузить обучающие данные, чтобы создать и обучить ранкер.
Качество обучающего набора очень важно. Ваши данные обучения должны соответствовать следующим критериям качества, чтобы эффективно повышать релевантность ответов, возвращаемых службой Retrieve and Rank:
- Файл должен содержать не менее 49 уникальных вопросов.
- Количество записей должно как минимум в 50 раз превышать количество полей, указанных в вашей конфигурации Solr. Например, если ваша коллекция определяет пять полей, у вас должно быть не менее 250 записей в ваших обучающих данных.
- В данных должны существовать как минимум две разные метки релевантности, и эти метки должны быть хорошо представлены. Ярлык хорошо представлен, если он встречается хотя бы один раз на каждые 100 уникальных вопросов.
Файл релевантности, который нам нужно использовать на следующем шаге, должен быть в следующем формате CSV:
- ID ответа - это уникальный ключ документа, который индексируется в вашей коллекции.
- Метка релевантности - это неотрицательное целое число (от нуля до некоторого верхнего предела). Чем больше число, тем выше актуальность.
Например:
«какие законы подобия необходимо соблюдать.», «184», «3», «29», «3», «31», «3» «Каковы структурные и аэроупругие проблемы.», «12», «4», «15», «3», «свойства материала фотоупругих материалов»., «463», «4», «462», «2» , «497», «0»
6 Создание данных о тренировках и рейтинге
Хорошие новости: вы почти закончили :). Команда IBM Watson предоставляет сценарии python, которые создают обучающий набор на основе вашего наземного csv. Файл сценария Python train.py принимает в качестве входных данных следующий формат:
train.py -u {username:password} -i {relevance_file} -c {cluster_id} -x {collection_name}\ [-r {solr_rows_per_query}] [-n {ranker_name}]
Сценарий создает в вашем рабочем каталоге файл с именем trainingdata.txt. Этот файл используется для создания ранжатора. По завершении сценария в окне сценария отображается новый идентификатор ранжера и его статус. Он нам понадобится, когда мы будем повторно оценивать результаты во время выполнения.
7 Время задать вопрос
Давайте протестируем систему. вы можете искать в своей коллекции с ранкером или без него. поиск без ранкера полезен для получения достоверной информации.
- поиск без ранкера (поиск по солнечному стандарту)
- Поиск с помощью рейтинга
8 Помогите мне узнать больше
вы можете собрать уровень удовлетворенности пользователей в отношении ответов системы, чтобы обучить вашу систему и улучшить результаты. вы можете обновить свою основную истину на основе ввода данных пользователем и повторить шаг 6.