Как юристу найти аналогичную российской статью в зарубежном праве

В последнее время многие компании из РФ вынуждены регистрировать бизнес в соседних государствах. Частым запросом является адаптация имеющихся документов сервиса (оферта, пользовательское соглашение и т.д.) под требования законодательства страны регистрации. Ввиду схожести правовых систем, зачастую достаточно лишь заменить нумерацию статей на соответствующую местному законодательству. Рассказываю как здесь может помочь косинусное сходство, embeddings, RAG и другие непонятные юристу слова из машинного обучения.

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

Как это работает со статьями ГК РФ и ГК РК можно посмотреть в демке, которую я написал на новогодних каникулах. К сожалению ничего подобного с бОльшим объемом НПА я не нашел. Если знаете хороший бесплатный сервис, напишите, пожалуйста, в комментариях к посту.

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

Итак, для того чтобы сравнить два юридических текста нам нужно перевести их в математические векторы, именуемые в машинном обучении - Embeddings.

Существует несколько популярных методов создания word embeddings:

Word2vec - обучает нейронную сеть предсказывать контекстные слова по заданному слову.

GloVe - использует статистику совместной встречаемости слов, чтобы получить векторные представления.

BERT - использует transformer-архитектуру для получения контекстных внедрений слов.

Главное преимущество embeddings в том, что они позволяют моделировать семантические отношения между словами. Например, вектора слов "король" и "королева" будут близки в векторном пространстве.

Самый простой для нас способ, не погружаясь сильно в теорию машинного обучения использовать готовую модель "text-embedding-ada-002" от опенаи. Она довольно дешевая, но при этом очень качественная. Сравнивал с бесплатной моделью от Сбера, которая доступна здесь, результат в моем сценарии на порядок лучше у опенаи, хотя модель Сбера обучалась на русском языке и я полагал что она может быть лучше для нашего законодательства, но нет.

Использовать модель можно прямо в GAS, cохраняя результаты в гугл-таблицу. Для это потребуется следующая функция для получения эмбеддинга.

function getEmbedding(input) { const apiUrl = 'https://api.openai.com/v1/embeddings'; const options = { method: 'post', headers: { Authorization: `Bearer ЗДЕСЬ НУЖНО УКАЗАТЬ ВАШ ТОКЕН ОТ ОПЕНАИ`, 'Content-Type': 'application/json', }, muteHttpExceptions: true, payload: JSON.stringify( { "model": "text-embedding-ada-002", "input": input, }), }; const response = UrlFetchApp.fetch(apiUrl, options); const content = response.getContentText(); let json = JSON.parse(content) if (json.error) { return json.error.message } return json.data[0].embedding }

И вторая функция, которая берет текст из столбца В, в котором хранится текст статей ГК и сохраняет эмбеддинг в столбец С.

function testEmbed(){ let ss = SpreadsheetApp.openById('ID таблицы').getSheetByName('ГК РК') let txt_arr = ss.getRange(2,2,ss.getLastRow()-1,1).getValues() for(i=0;i<txt_arr.length;i++){ if (ss.getRange(i+2,3).getValue() === ''){ let emb = getEmbedding(txt_arr[i][0]) ss.getRange(i+2,3).setValue(String(emb)) Utilities.sleep(500) } } }

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

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

Кому, как и мне, интересно автоматизировать юридические процессы, присоединяйтесь ко мне в телеграме

Начать дискуссию