Pull to refresh
-5
0

Пользователь

Send message

Знакомьтесь, FRIDA. Открытая эмбеддинг-модель для русского языка

Level of difficultyMedium
Reading time8 min
Views13K

В этой статье мы расскажем о нашей новой модели FRIDA, которая сейчас (20.05.2025) занимает первое место в русскоязычном бенчмарке MTEB (ссылка на таблицу лидеров).

Ранее мы уже рассказывали на Хабре о создании русскоязычных задач для MTEB. Напомним, что этот бенчмарк предназначен для оценки моделей, способных создавать эмбеддинги текста — векторные представления, применяемые в различных задачах NLP.

Читать далее

Автоматизация публикации Android приложений в Google Play и Huawei AppGallery — инструкция от А до Я

Level of difficultyHard
Reading time19 min
Views18K

Всё еще публикуете релизы Android приложений вручную? Почитайте наше подробное руководство как полностью автоматизировать публикацию Android приложений в Google Play и Huawei AppStore через Gradle и CI/CD. Подробно от А до Я.

Почитать инструкцию

KStorage — единый подход к key-value хранилищам на Kotlin Multiplatform

Level of difficultyEasy
Reading time5 min
Views1.5K

Типобезопасное Key-Value хранилище для Kotlin Multiplatform. Единый API без боли, бойлерплейта и потери рассудка

Прочитать и убрать бойлерплейт из проекта

Оркестрация чатов LLM моделей через Redis

Level of difficultyHard
Reading time9 min
Views2.1K

🐝 Оркестрация чатов LLM через Redis

При работе с языковыми моделями частым явлением являются галлюцинации - когда модель даёт неверных вывод. Это связано с издержками математической модели, которая пораждает важные нюансы, разобранные в данной статье. Статья описывает, что именно нужно сделать, чтобы эффективно бороться с галлюцинациями LLM на проде

Читать далее

Новые паттерны при выводе GenAI-продуктов в продакшн (часть 1)

Reading time19 min
Views2.1K

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

Главное — научиться держать под контролем их непредсказуемость. Тут на сцену выходят evals — тесты, которые проверяют, укладывается ли поведение модели в допустимые рамки.

Сами по себе большие языковые модели (LLM) — как энциклопедия без интернета: знают много, но только то, чему их однажды научили. Чтобы вытащить их за пределы обучающей выборки, их усиливают. Чаще всего — через Retrieval-Augmented Generation (RAG), где модель подхватывает свежую информацию из внешней базы. Правда, даже у базового RAG хватает слабых мест, и чтобы его раскочегарить, приходится применять дополнительные паттерны. Когда и этого не хватает — в ход идёт тонкая настройка (fine-tuning).

Перевод генеративных ИИ-продуктов из состояния PoC в боевые системы оказался куда сложнее, чем ожидалось. И дело не только в технологиях — корень многих проблем в том, что команды мыслят слишком по-старому. Они воспринимают GenAI как надстройку над привычными транзакционными или аналитическими системами. На практике же всё иначе: здесь свои баги, свои грабли и свои демоны. ИИ галлюцинирует, лезет туда, куда не просили, и вечно отвечает чуть-чуть не так. А ещё он непредсказуем — от слова совсем.

Со временем мы заметили, что команды начинают вырабатывать повторяющиеся подходы к решению этих задач. Это статья — попытка собрать эти паттерны воедино. Всё, что вы прочитаете — не догма. GenAI-системы молоды, инструменты появляются буквально каждую неделю, и многие открытия ещё впереди. Как и с любыми паттернами, здесь важно не только что делать, но и когда.

Читать далее

Строим VXLAN/EVPN на несколько ЦОД

Level of difficultyMedium
Reading time26 min
Views4K

Что делать и куда бежать, если тебе нужно построить сеть на несколько ЦОД, с L2 связностью между площадками, отказоустойчивостью и масштабированием. В этой статье предлагаю рассмотреть некоторые из возможных подходов к организации больших сетей с использованием VXLAN/EVPN.

Читать далее

Технология пассивного радиопеленгования БПЛА: Обнаружение, сопровождение и классификация

Level of difficultyMedium
Reading time7 min
Views4.3K

В данной работе мы представляем технологию пассивного радиопеленгования беспилотных летательных аппаратов (БПЛА). В её основе лежит многопозиционный подход, позволяющий точно определять координаты радиоизлучающего объекта, преимущественно БПЛА, без применения активных радиолокационных средств.

Читать далее

Terraform уже не тот? Как Pulumi меняет правила игры в Infrastructure as Code

Reading time6 min
Views5.1K

Привет, Хабр! Сегодня поговорим про инфраструктуру как код. Почему Terraform уже не единственный игрок в мире IaC, а Pulumi становится всё более актуальным. Я расскажу, как эти инструменты работают, чем отличаются, и почему стоит присмотреться к Pulumi, особенно, если вы хотите гибкости и мощи в управлении облаками.

Читать далее

API для перевода на 100+ языков

Level of difficultyEasy
Reading time4 min
Views1.4K

Всем привет! Меня зовут Алексей Рудак, и я – основатель компании Lingvanex, которая уже 8 лет занимается решениями в области машинного перевода и транскрипции речи. 

За последний год мы сильно переработали наше API переводчика, сделав его максимально удобным и быстрым для интеграции. Формат запроса теперь совпадает с  Google, поэтому переход на наше API занимает в районе 5 минут. Более того, сильно выросло качество перевода. Наши языковые модели включают в районе 500 млн параметров и оптимизированы только на одну задачу - перевод.

Наша ближайшая цель - сделать сделать лучший перевод на популярных языковых парах и постепенно мы к ней движемся. Каждые 2 недели выходит апдейт, который повышает качество перевода. Почему две недели ? Это среднее время одной тренировки языковой модели. Всего у нас 240 языковых моделей размером от 120 до 560 mb, которые можно развернуть локально даже на слабых игровых видеокартах типа RTX 3060.

Ниже для примера представлены результаты тестов качества для перевода с английского на арабский язык. Сейчас перевод на арабский больше всего интересен наши клиентам, которые ходят зайти на этот рынок. Стоит отдельно отметить результаты тестов  на датасетах (NTRex-128, Flores-101, WMT24++) так как это наиболее распространенные виды тестов среди ученых и бизнеса. Зеленым цветом выделены числа, где у нас лучше качество, чем у конкурентов, красным - где хуже. В колонке Lingvanex качество сравнивается между нашей новой и предыдущей моделью.

Читать далее

Грамматический разбор для естественных языков. Ч.2: Алгоритм Кока—Янгера—Касами (CYK)

Reading time8 min
Views4.7K

(Ч.1: Языки описания языков)

В идеале нам хотелось бы разбирать текст за линейное время и за один проход. Регулярные выражения это позволяют, но уже с CFG это не получится: например, S → A | B; A → a | x A; B → b | x B превращает строку x…xa в дерево из узлов A, а строку x…xb в дерево из узлов B — и пока разборщик не увидит последний символ строки, он не знает, что делать со всеми предыдущими символами. Поэтому на грамматики для языков программирования накладывают дополнительные ограничения — по сути, чтобы для разбора не приходилось "заглядывать вперёд" — позволяющие разбирать текст программы за один проход. Кто ковырялся в компиляторах, тот наверняка знаком с LL- и LR-разбором, и имеет опыт "подгонки" грамматики языка под требования конкретного алгоритма разбора. Но при работе с естественными языками нет возможности "подправить" язык для удобства разбора — приходится работать с тем языком, какой есть.

В 1960-х был разработан алгоритм CYK для разбора произвольного CFG. Считается, что впервые его опубликовали — независимо друг от друга — И. Сакаи из японского НИИ Минобороны в 1961 и Дж. Кок из Нью-Йоркского университета в 1962. В 1966 тот же самый алгоритм публиковали — опять независимо — Д. Янгер из General Electric и Т. Касами из Университета Иллинойса. Янгер в своей публикации упоминает имена Кока и Сакаи, но не ссылается ни на какие конкретные их работы: по всей видимости, работы Кока и Сакаи Янгеру — как и мне сейчас — не были доступны. Чтобы никому из изобретателей алгоритма не было обидно, его называют в честь сразу троих, хотя они, скорее всего, даже не были между собой знакомы.

Читать далее

Грамматический разбор для естественных языков. Ч.1: Языки описания языков

Reading time4 min
Views6K

Исторически первой попыткой формализовать язык и автоматизировать его разбор были регулярные выражения, придуманные С.К. Клейни в 1951. Регулярное выражение составляется из символов языка ("терминалов"), и трёх операций: конкатенация, чередование и замыкание. Для разбора регулярных выражений достаточно ДКА без памяти: разборщик знает, в каком состоянии он находится сейчас, но не помнит ничего о своих прошлых состояниях. Это значит, что языки, допускающие вложенные конструкции — например, язык вложенных скобок (n)n и язык самих регулярных выражений — невозможно описать регулярными выражениями. Естественные языки тоже допускают конструкции неограниченной вложенности ("Вот два петуха, которые будят того пастуха, который бранится с коровницей строгою, которая доит корову безрогую, лягнувшую старого пса без хвоста, который за шиворот треплет кота, который пугает и ловит синицу, которая часто ворует пшеницу, которая в тёмном чулане хранится в доме, который построил Джек."), поэтому для описания естественных языков регулярные выражения недостаточно выразительны.

Более выразительный способ описания языков — формальные грамматики — предложил Н. Чомски в 1956. Предложения на английском довольно неплохо поддаются такому описанию:

Читать далее

Как стать модным Android-разработчиком в 2022 году

Reading time4 min
Views9.5K

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

С другой — перечисленные технологии становятся новой реальностью. И теперь просто знать о мультипоточности, ViewModels и LiveData становится недостаточно.

Читать далее

Идеальная страница с тарифными планами. Гайд с примерами и рекомендациями

Level of difficultyEasy
Reading time11 min
Views1.6K

Страница тарифов может быть самой важной страницей вашего сайта. Здесь клиенты принимают ключевое решение: стоит ли ваш продукт запрашиваемых денег?

Правильно структурированная страница повышает конверсию до 50%, а публикация цен даже для enterprise-решений становится конкурентным преимуществом.

Анализ десятков SaaS-компаний выявил ключевые элементы, превращающие страницу цен в мощный инструмент конверсии.

Читать далее

Простая архитектура с использованием MVVM и делегатов в Android. Оптимальное решение для малых проектов

Level of difficultyEasy
Reading time17 min
Views14K

В этой статье мы рассмотрим, как создать простую архитектуру Android, используя паттерн MVVM (Model-View-ViewModel) и делегаты для эффективного управления состоянием.

Читать далее

Компонентный подход. Организуем навигацию с помощью библиотеки Decompose

Level of difficultyEasy
Reading time11 min
Views11K

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

В статье много практики. Сначала я покажу, как с помощью Decompose и Jetpack Compose создавать отдельные флоу приложения. Далее обсудим реализацию bottom-навигации. И, наконец, объединим несколько флоу воедино, чтоб получить навигацию по всему приложению.

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

Читать далее

Разбираемся со сканерами в Linux: Практики использования SANE

Level of difficultyEasy
Reading time35 min
Views9.4K
В третьей части продемонстрируем различные

Paging3 в стиле Compose: секретный DSL, о котором молчат все Android-разработчики

Level of difficultyMedium
Reading time11 min
Views2.7K

В статье описан путь преобразования предложенного экспертами Google способа отображения страничных данных с использованием библиотеки Paging3 и Compose от развесистого сборника if'ов и when'ов, вероломно нарушающего все границы архитектурных слоев, до чистого, лаконичного и затягивающего в себя DSL.

Погрузиться в магию

Login with MetaMask 1/2 (GO lang)

Level of difficultyMedium
Reading time5 min
Views650

Приветствую тебя, дорогой Разработчик! Хочу поделиться своим опытом о том, как реализовать вход с помощью кошелька Metamask (расширение для браузера) в твой проект. В этой статье я пропускаю весь код архитектуры приложения и покажу тебе только сервисный код (нижний уровень кода. Взгляни на DDD архитектуру, также известную как «Чистый код»). Я использую GO с распространенными библиотеками для веб‑разработки, такими как Gin, jwt, sqlc и другие.

Для начала давай представим, как должен работать наш процесс входа. Как мы все знаем, стратегия «разделяй и властвуй» очень эффективна для чего угодно. Поэтому здесь мы можем разделить наш процесс на 2 логических шага. Назовем их «Начало» и «Завершение». Теперь давай посмотрим на схему нашего процесса, потому что мы, как инженеры, должны максимально упростить свою работу. Итак, схема — отличный способ достичь этого.

Читать далее

Изоляция с помощью глобальных акторов в Swift Concurrency: варианты на примере @MainActor

Reading time7 min
Views828

Привет, Хабр! Меня зовут Алексей Григорьев, я техлид iOS-разработки продукта Membrana в МТС. Это тариф с приложением для управления приватностью в сети и окружением.

Swift Concurrency принесла множество инструментов для управления многопоточностью. Среди них глобальные акторы, которые помогают обеспечивать безопасность данных и контролировать потоки выполнения.

Один из самых распространенных и полезных глобальных акторов — это @MainActor, который гарантирует выполнение операций в главном потоке приложения. В этом посте я на его примере покажу все варианты, как можно реализовать изоляцию и что в итоге выведет код: на каком потоке будут выполнены update, internal update и set в property.

Читать далее

Information

Rating
Does not participate
Location
Россия
Registered
Activity