dimhold.by
← Артыкулы

2 спісы па 30 тэставых імёнаў ад адной мадэлі Claude супадаюць хаця б адным імем да 98% пар. У Faker 1,29%

Калі мне патрэбныя тэставыя даныя, а мадэль ужо адкрытая, я проста прашу яе. “Generate 30 random email addresses for test fixtures.” Адказ прыходзіць за секунду і спіс выглядае выпадковым. Праз гадзіну калега робіць тое ж самае для іншага тэсту. Потым абедзве фікстуры трапляюць у 1 сід базы з абмежаваннем UNIQUE на калонцы.

Тут выпадковы выгляд 1 спіса нічога не кажа. Сід падае, калі 2 спісы з 2 асобных запытаў дзеляць хаця б 1 значэнне. Мне трэба было гэтая лічба, таму я яе вымераў. У артыкуле яна называецца P_pair: доля пар незалежных запускаў, у якіх ёсць агульнае значэнне.

Тут ужо былі да мяне

Агульная ідэя не мая. Што мадэлі паўтараюцца на адкрытых пытаннях, добра вымерана, а Artificial Hivemind называе генерацыю імёнаў сярод задач, дзе разнастайнасць ужо правяралі. Бліжэй за ўсё работа пра падробленыя персанальныя даныя (arXiv:2605.13538). Там маленькая мадэль прыдумвала імёны і адрасы, а аўтары наўпрост параўналі іх з Faker. Па выніку на задачы NER падробкі мадэлі далі менш разнастайны навучальны набор, чым Faker. Больш ранняя работа пра сінтэтычныя пасведчанні асобы (arXiv:2411.14962) паведаміла адваротнае: палі ад LLM аказаліся разнастайнейшыя за шаблоны Faker.

Так што фразу “выдуманыя мадэллю даныя аднастайнейшыя, чым у Faker” ужо вымаўлялі, прычым у абодва бакі. Мой унёсак вузкі. Адзінка ліку тут пара незалежных запускаў, якраз як у сідзе вышэй. У тэсце ёсць ідэнтыфікатары: email і імёны карыстальнікаў. Faker працуе на тых жа памерах, што і мадэлі. Мадэлі гэта 7 мадэляў Claude, бягучыя і папярэднія, праз той CLI, у які распрацоўшчык сапраўды піша.

Як я пытаўся

Тыпаў значэнняў было 7, кожны ў самай простай фармулёўцы, якую я мог прыдумаць, накшталт “Generate 30 random person full names for test fixtures.” Кожны запыт ішоў у 3 варыянтах. Першы прасіў па адным значэнні на радок. Другі прасіў масіў JSON. Трэці прасіў па адным значэнні на радок і дадаваў фразу з просьбай зрабіць значэнні як мага больш непадобнымі адно на адно.

З бягучага пакалення я ўзяў Opus 5.5, Sonnet 5.5, Haiku 5.5 і Fable 5.1, з папярэдняга Opus 5, Sonnet 5 і Haiku 4.5. 1274 выклікі прайшлі 19 і 20 кастрычніка 2026. Кожны выклік быў асобным працэсам claude -p без гісторыі і з выключанымі інструментамі, так што 2 запускі нічога адзін пра аднаго не ведаюць. Для параўнання Faker 40.43.0 зрабіў па 300 набораў з 30 значэнняў на кожны тып.

Імёны

доля пар запускаў, у якіх ёсць хаця б 1 агульнае імя, просты запыт 0% 50% 100% Opus 5.5 96% Sonnet 5.5 64% Haiku 5.5 98% Fable 5.1 80% Opus 5 64% Sonnet 5 96% Haiku 4.5 71% Faker 1,29%
45 пар з 10 запускаў на мадэль. Faker: 300 набораў па 30, 44 850 пар. У артыкуле для кожнай ячэйкі ёсць 95% інтэрвал.

На простым запыце 2 спісы па 30 імёнаў ад адной мадэлі дзялілі хаця б 1 імя ў 64-98% пар. Faker таго ж памеру зрабіў гэта ў 1,29% пар. Па ўсіх 7 мадэлях гэта 256 пар з 315.

Унутры аднаго адказу ніводная мадэль імя не паўтарыла, так што кожны спіс сам па сабе выглядае нармальна. Паўтор узнікае толькі паміж запускамі. Dmitri Volkov вярнуўся ў 26 простых запусках з 70, Priya Raghunathan у 24 і Kwame Asante у 19.

Ідэнтыфікатары залежаць ад мадэлі

З email мадэлі разышліся. 2 спісы ад Opus 5.5 супалі ў 56% пар, ад Sonnet 5.5 у 36%, а ў Haiku 5.5 ніводная з 45 пар не супала. Адрас alice.morgan@example.com вярнуўся ў 7 запусках з 70. Па імёнах карыстальнікаў 4 мадэлі з 7 стаяць вышэй за Faker нават ніжняй мяжой інтэрвалу.

Я чакаў, што варыянт з JSON зменшыць разнастайнасць, бо работа 2026 года знайшла якраз гэта на адказах з аднаго слова. Тут гэта правілам не стала. У адных мадэляў разнастайнасць вырасла, у іншых упала.

Просьба пра разнастайнасць

пары запускаў з агульным значэннем, усе 7 мадэляў разам імёны, просты запыт 81% 256 з 315 імёны, запыт просіць разнастайнасці 55% 58 з 105 email, просты запыт 19% 59 з 315 email, запыт просіць разнастайнасці 0% 0 з 105
Запыт з просьбай пра разнастайнасць ішоў 6 разоў на мадэль, гэта 15 пар на мадэль і 105 усяго. Faker таго ж памеру: 1,29% для імёнаў і 0,38% для email.

Лішняя фраза пра разнастайнасць цалкам паправіла email: 0 супадзенняў у 105 парах па ўсіх 7 мадэлях. Імёны яна не паправіла. Імёны сталі разнастайнейшыя ў кожнай мадэлі, але ніводная не дайшла да Faker і 58 пар з 105 усё роўна дзялілі імя.

Што я не змог раздзяліць

CLI гэта не голы API. Ён адпраўляе свой сістэмны промпт і ў гэтым кантэксце былі даныя майго акаўнта. У 1 адказе мадэль прайграла email акаўнта, мой нік на GitHub і горад, што супадае з часавым поясам машыны. Значыць гэтая інфармацыя да мадэлі дайшла.

Самае частае імя Dmitri Volkov, а Дзмітрый гэта маё імя. Па ўсіх 3 варыянтах запыту яно сустракаецца ў 66 запусках з імёнамі са 182. Ці падштурхнуў яго кантэкст майго акаўнта, ці мадэлі любяць яго і так? Я гэтага не правяраў. Калі прыбраць гэтае імя з усіх спісаў, агульны лік мяняецца з 256 на 254 пары з 315, так што долі на ім не трымаюцца. Якія імёны апынуцца наверсе, ад кантэксту залежаць усё ж можа. Гэта вырашыў бы прагон праз голы API без кантэксту акаўнта, а яго я не рабіў.

Ёсць яшчэ 2 рэчы, якія трэба сказаць проста. Вынікі па UUID тут нічога не значаць, бо з выключанымі інструментамі некалькі мадэляў адказвалі на запыт UUID разметкай выкліку інструмента замест значэнняў. І свае чаканні я запісаў за 18 хвілін да старту прагону, а закаміціў іх толькі тады, калі ў журнале ўжо было 52 адказы. Ніводнай долі супадзенняў да таго моманту палічана не было, а што я бачыў і мяняў у прамежку, пералічана ў артыкуле.

Што я раблю цяпер

Для любой калонкі з абмежаваннем UNIQUE я б не браў значэнні ў мадэлі. 30 значэнняў гэта маленькая фікстура, а ў вялікай шанцаў супасці больш. Горш за ўсё тое, што падзенне плаваючае: яно залежыць ад таго, які адказ дастаўся кожнай фікстуры. Генератар накшталт Faker гэта вырашае, а мадэль усё гэтак жа можа напісаць выклік генератара. Просьбы пра разнастайнасць у гэтай выбарцы хапіла для email, але не для імёнаў.

Поўны тэкст з усімі табліцамі ляжыць на старонцы артыкула. Абвязка, усе адказы цалкам і скрыпты аналізу ляжаць у рэпазіторыі.