Овладение языком и наука о данных идут рука об руку. Давайте создадим на Python эффективный инструмент для отслеживания вашего пути к свободному владению языком.

Вы, вероятно, были в самом разгаре своего собственного путешествия по изучению языка и охотились за иллюзорным понятием беглости. Без надежной стратегии достижения беглости это может показаться невозможным. В некоторые дни вы можете чувствовать себя «разговорчивым», в то время как в другие дни вы смущены тем, сколько раз вы сказали «можете повторить это» своему языковому партнеру.

Имея это в виду, важным аспектом изучения языка является уверенность в том, что вы действительно делаете успехи. Как сказал известный писатель и философ Альфред А. Монтаперт:

«Не путайте движение и прогресс. Лошадка-качалка продолжает двигаться, но не делает никакого прогресса».

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

Чтобы преобразовать движение в прогресс, я хотел сначала начать отслеживать количество уникальных существительных и глаголов, которые я использовал в каждом 30-минутном разговоре. Как только у меня был базовый уровень, я мог ставить цели по словарному запасу, чтобы вести разговоры на разные темы с расширенным словарным запасом. Кроме того, было бы очень полезно посмотреть, сколько раз я произнес каждый глагол или прилагательное в разговоре. Это позволило бы мне увидеть, какие области мне нужны, чтобы обогатить свой словарный запас.

Благодаря библиотеке spaCy это легко сделать — и бесплатно!

Ниже я расскажу о трех простых шагах, которые позволят вам проанализировать ваши разговоры и добиться устойчивого прогресса.

1. Запись

Чтобы отслеживать прогресс, нам нужно собирать необработанные данные. К счастью, на многих бесплатных онлайн-сайтах, преобразующих речь в текст в реальном времени, есть варианты для разных языков. Вот несколько рекомендаций при этом:

  • Используйте наушники во время записи разговора, чтобы слышать только свою речь, а не речь вашего партнера.
  • Параллельно сделайте стандартную запись разговора. Это поможет вам исправить ошибки, допущенные преобразователем речи в текст, после того, как вы закончите разговор.
  • Не смотрите, как транскрибируется ваша речь. Это может быть отвлечением.
  • Запишите одинаковую длину для каждого разговора, чтобы со временем он оставался стандартным.

После того, как документ будет должным образом очищен и исправлен, сохраните его как файл .txt.

2. Процесс

Прежде чем мы сможем проанализировать наши данные, чтобы найти идеи, нам сначала нужно настроить spaCy и языковую модель в Python.

Обратите внимание, что spaCy уже обучил модели для 23 языков. Полный список смотрите в конце. Однако в дальнейшем в статье я буду использовать испанскую модель в качестве примера. См. в конце полное пошаговое руководство о том, как изменить настройку на целевой язык.

#The first two lines will install the spaCy library 
#The third line will download the Spanish model

%pip install -U pip setuptools wheel
%pip install -U spacy
!python -m spacy download es_core_news_sm

Теперь мы можем импортировать наши базовые библиотеки и создавать код для достижения цели.

import spacy #this imports the spaCy library
import pandas as pd #pandas will be used to house a data in a dataframe

Теперь, когда наша начальная настройка завершена, нам нужно понять два очень важных процесса: лемматизация и токенизация.

Токенизация: процесс разделения строки или текста на список слов, называемых токенами. Разделение длинного текста на более мелкие фрагменты, такие как отдельные слова, позволяет компьютеру сопоставить каждому слову его конкретную синтаксическую функцию (глагол, существительное, прилагательное и т. д.).

Лемматизация: процесс удаления из слова любых морфологических перегибов. Или, проще говоря, вернуть слову его словарную форму. Любой, кто изучал испанский язык, знает, что глаголы можно спрягать миллионом и двумя способами. Следовательно, лемматизация возвращает спрягаемый глагол в его неопределенность. Лучше всего это понять на примерах: bailo, bailas, baila -> bailar.

Точно так же в русском языке это означало бы возвращение существительного в его именительный падеж. Например, квартире, квартиры, квартиру -›квартира. Это очень важно, так как позволяет вам точно увидеть, сколько различных слов вы знаете, без искусственного завышения числа из-за того, что флективные слова считаются отдельными словами.

К счастью для нас, spaCy автоматически обрабатывает оба этих процесса, когда вы передаете файл диалога в языковую модель. Вот как это сделать:

import spacy #this imports the spaCy library
import pandas as pd #pandas will be used to house the data in a dataframe

#First two lines opens and reads the conversation file
filepath = '/content/spanish_file.txt'
conversation = open(filepath, encoding='utf-8').read()

#In the first line loads the spanish model and assigns it to the variable nlp
#The next line spaCy runs your conversation against the model and assigns all the useful data to variable called document
nlp = spacy.load('es_core_news_sm')
document = nlp(conversation)
pos = 'VERB'

#This line finds all the Verbs and puts them into a list
verb = [token.lemma_ for token in document if token.pos_ == pos]

Самая трудная часть сделана! Теперь мы можем взглянуть на результаты. Вот как должны выглядеть обработанные данные:

3. Анализ

Чтобы проанализировать наши результаты, нам нужно поместить список лемм во фрейм данных. Как только мы это сделаем, мы сможем увидеть общее количество глаголов, использованных в разговоре. И наоборот, мы также можем подсчитать, сколько раз каждая отдельная лемма использовалась в разговоре, и отсортировать ее от большего к меньшему. Я покажу вам, как сделать и то, и другое, но есть бесконечные способы анализа этих данных в пандах!

Вот код, который помещает обработанные данные во фрейм данных и подсчитывает, сколько различных глаголов было использовано.

import spacy 
import pandas as pd 

filepath = '/content/spanish_file.txt'
conversation = open(filepath, encoding='utf-8').read()

nlp = spacy.load('es_core_news_sm')
document = nlp(conversation)
pos = 'VERB'

verb = [token.lemma_ for token in document if token.pos_ == pos]

#The first line puts the processed data into a datafram
#The second line counts the number of distinct lemmas
df = pd.DataFrame(verb, columns=['Verb'])
df_totalcount = df.nunique()
print(df_totalcount)

Теперь, когда вы разговариваете, вы можете легко увидеть, сколько различных глаголов вы произнесли во время этого сеанса, и вы можете отслеживать их с течением времени. Вы можете изменить переменную pos на «NOUN» или «ADJ» для существительных или прилагательных, чтобы увидеть использование других частей речи. Вот список всех различных частей вашей речи, которые вы можете отслеживать с помощью spaCy:

Далее я покажу вам, как составить таблицу частотности каждой леммы глагола.

import spacy 
import pandas as pd 

filepath = '/content/spanish_file.txt'
conversation = open(filepath, encoding='utf-8').read()

nlp = spacy.load('es_core_news_sm')
document = nlp(conversation)


verb = [token.lemma_ for token in document if token.pos_ == 'VERB']

#The first line puts the processed data into a dataframe
#The second line groups each verb and counts the frequency of it
#The third line sorts the dataframe from highest frequency to lowest
df = pd.DataFrame(verb, columns=['Verb'])
df = df.groupby('Verb')['Verb'].count().reset_index(name='Count')
df = df.sort_values(by=['Count'], ascending=False)

print(df)

Отлично, теперь у нас есть две действительно полезные таблицы для отслеживания вашего прогресса в изучении языка. Первый дает общий обзор вашего прогресса, который вы можете отслеживать ежедневно или еженедельно.

Между тем, вторая таблица позволит вам увидеть, какие глаголы или прилагательные вы используете чаще всего. Вы можете выполнять множество упражнений с этими данными, чтобы ускорить изучение языка. Например, вы можете найти синонимы для ваших наиболее часто используемых прилагательных, чтобы расширить словарный запас. Точно так же вы можете выполнять упражнения на спряжение наиболее часто используемых глаголов, что позволит вам говорить более бегло. Возможности безграничны!

На этом этапе, я надеюсь, вы начинаете понимать, насколько хорошо работают вместе наука о данных и овладение языком. На самом деле, целая отрасль науки о данных посвящена обработке языка, называемой обработкой естественного языка (NLP).

С этими двумя таблицами вы уже на пути к свободному владению целевым языком. На этом этапе вы также можете визуализировать свой прогресс, используя такие библиотеки, как seaborn или matplotlib, или, если это не ваша сильная сторона, вы всегда можете записать данные в CSV и использовать графики Excel. Однако, по крайней мере, сейчас вы можете начать отслеживать и понимать, добиваетесь ли вы устойчивого прогресса. Отличный первый шаг!

Приложение

A. Список языков с обученным пайплайном в spaCy:

каталонский, китайский, хорватский, датский, голландский, английский, финский, французский, немецкий, греческий, итальянский, японский, корейский, литовский, македонский, норвежский (букмол), польский, португальский, румынский, русский, испанский, шведский, украинский

B. Шаги по изменению языка

  1. Скопируйте и запустите код установки из spaCy. Вы можете найти точный код для копирования здесь.

2. Измените часть в одинарных кавычках на свой язык. Вы можете найти именно код для копирования здесь. После этого все готово!

#old
nlp = spacy.load('es_core_news_sm')

#new
nlp = spacy.load('de_core_news_sm')

Спасибо за чтение! Оставайтесь с нами, чтобы узнать больше.