Size: a a a

Natural Language Processing

2021 May 18

OM

Orzhan Mikhail in Natural Language Processing
https://www.gitmemory.com/issue/huggingface/pytorch-transformers/1009/521588881
Вот тут еще добавляют в начало токен  <|endoftext|> и делают нормализацию по длине, чтобы длинные предложения не становились слишком маловероятными
источник

DD

David Dale in Natural Language Processing
Какого-то сильно лучшего способа предсказания вероятности текста, чем перплексия языковых моделей, пока, afaik, не придумали.

Проблема конкретно GPT в том, что в нём нет понятия "предложения" как отдельного юнита, там текст представлен как бесконечное полотно символов. Поэтому нужно как-то показать нейросети границы предложения - например, вставить \n до и после текста.
Другая проблема твоей формулы в том, что loss там считается как "средняя перплексия на токен". Привт ммыр токенизатор разбивает на 6 токенов, а Привет мир - на 2, поэтому в случае с Привт ммыр знаменатель большой, и перплексия относительно небольшая. Поэтому я предлагаю не нормализовать лосс на длину текста (т.е. фактически денормализовать его назад). Собственно, тогда мы получаем "вероятность предложения" в чистом виде: вероятность того, что GPT, если ему подать на вход \n, сгенерирует твоё предложение, и потом сгенерирует \n, обозначая конец предложения.
Ну и наконец я уберу экспоненту, т.к. у очень маловероятных текстов overflow может произойти.

Получается такой код:
def score(text):
   tokens_tensor = tokenizer.encode('\n' +  text + '\n', add_special_tokens=False, return_tensors='pt')
   loss=model(tokens_tensor, labels=tokens_tensor)[0]
   n_tokens = tokens_tensor.shape[1] - 1
   return loss.cpu().detach().numpy() * n_tokens

for text in ['Привет, мир!', 'Привт ммыр', 'Привет мир']:
   print(score(text))
С более адекватными скорами
18.65758180618286
45.31049299240112
20.60703706741333
источник

DD

David Dale in Natural Language Processing
Я могу предложить только костыль: после каждого градиентного шага (или раз в k шагов) перетирать обновлённые эмбеддинги старыми для "замороженных" токенов.
Это вычислительно не самое эффективное решение, но минимальное по объему кода, который нужно дописать.
источник

AL

Anton Lozhkov in Natural Language Processing
первый вариант в принципе выполнимый, если в embedding.weight записать сконкатенированные torch.tensor (для фиксированных) и nn.Parameter (для обучаемых)
источник

K

Ksenia in Natural Language Processing
Понял, отличный вариант!
источник

VF

Vadim Fomin in Natural Language Processing
Можно в оптимизатор просто добавить не все веса. Тогда будут только добавленные апдейтиться.
источник

A

Andrei in Natural Language Processing
о, крутяк, спасибо!
источник

K

Ksenia in Natural Language Processing
нашла ошибку)))
источник

K

Ksenia in Natural Language Processing
все-таки, можно так делать
источник

EP

Ekaterina Pylaeva in Natural Language Processing
Всем привет! Подскажите пожалуйста какую библиотеку стоит использовать при такой задаче: есть датафрейм терминов (и соответственно их определений), есть второй документ, где сформулированы словосочетания. Мне нужно соотнести словосочетания из датасета 2 с датасетом 1 (где термины и определения). Термины и словосочетания могут звучать одинаково, а могут и нет (например, Буровая установка и установка для бурения - утрирую, но все же). Мне нужно добавить к датасету со словосочетаниями наиболее подходящие термины и определения к ним. Подскажите подходящую для этого библиотеку питона и может какие-то статьи, которые помогут мне разобраться с задачей. Спасибо!
источник

AM

Alex Mak in Natural Language Processing
Термин и определение из дс1, полагаю, можно считать за один текст.
Таким образом у нас задача text similarity. Подобрать из дс1 тексты наиболее близкие к текстам из дс2.
Гуглить соответственно нужно в этом направлении, как я понимаю.
Библиотек не подскажу, к сожалению, т к сам только учусь в этом направлении.
источник

AM

Alex Mak in Natural Language Processing
Хотя нет, подскажу. Тот же spacy: https://medium.com/@duketemon/text-similarity-with-spacy-dc0dc8dd1fb8
источник

🐙

🐙 in Natural Language Processing
Ребят, тут тема seq2seq для восстановления пунктуации всплывала. Не могу понять, а какая разметка в таком случае нужна? Нашёл один пейпер, там чуть ли не словам, после которых идёт знак препинания, назначается метка этого знака. Это норм? Какие ещё есть варианты?
источник

SancheZz Мов in Natural Language Processing
Это грубо но так и есть
источник

SancheZz Мов in Natural Language Processing
Над иметь поправку на word piece
источник

SancheZz Мов in Natural Language Processing
Если использовать bpe и тп
источник

🐙

🐙 in Natural Language Processing
Спасибо, как раз раздумывал как это с bpe сращивать
источник

SancheZz Мов in Natural Language Processing
Там к сожалению над сдвигать позиции относительно нграмм вордпис
источник

SancheZz Мов in Natural Language Processing
Это доп работа
источник

A

Anton in Natural Language Processing
Поделитесь решением?
источник