<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://shacharmirkin.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://shacharmirkin.github.io/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-05-13T19:09:46+00:00</updated><id>https://shacharmirkin.github.io/feed.xml</id><title type="html">Shachar Mirkin</title><subtitle>Personal website of Shachar Mirkin — applied AI research, NLP, snippets, and contact.</subtitle><author><name>Shachar Mirkin</name></author><entry><title type="html">Alpine Ibex Vision Test</title><link href="https://shacharmirkin.github.io/ai/2026/04/30/ibex-vision-llm-test-2026/" rel="alternate" type="text/html" title="Alpine Ibex Vision Test" /><published>2026-04-30T07:00:00+00:00</published><updated>2026-04-30T07:00:00+00:00</updated><id>https://shacharmirkin.github.io/ai/2026/04/30/ibex-vision-llm-test-2026</id><content type="html" xml:base="https://shacharmirkin.github.io/ai/2026/04/30/ibex-vision-llm-test-2026/"><![CDATA[<p>Here’s an image of a herd of ibex I took in August 2024 in the <a href="https://vercors.fr/">Vercors mountain range</a> in France. There are over 20 of them, but yes, they’re really hard to see. I even had a hard time spotting them just a few hours after I saw them, so I was curious whether AI could do it. I asked some models whether they could spot any animals in the photo</p>

<p>Back then, nearly all state-of-the-art models <a href="https://x.com/shacharmirkin/status/1827401718604116224">failed miserably</a>, typically detecting only a single ibex, but I did get some <a href="http://x.com/shacharmirkin/status/1827751629053149346">funny responses</a>.</p>

<p>In April 2026, I tried it again, and this time I got some much better results, with Gemini 3.1 Pro detecting up to 10 ibex.</p>

<p>Possibly the most interesting result came when I asked Gemini to annotate them. It said it couldn’t.
But when I instead asked it to regenerate the image with the animals painted in blue, it produced the image below.
The capability was there all along. It was just a matter of framing the task differently to trigger it.</p>

<div style="text-align:center;">
  <img id="blue-ibex-preview" src="/assets/images/blue-ibex.jpeg" alt="Blue ibex (click to enlarge)" title="Click to enlarge" width="400" style="cursor:zoom-in;" tabindex="0" role="button" aria-label="Open enlarged blue ibex image" />
</div>

<dialog id="blue-ibex-lightbox" style="padding:0; border:none; background:transparent; max-width:none; width:100vw; height:100vh; margin:0;">
  <div style="width:100%; height:100%; display:flex; align-items:center; justify-content:center;">
    <img src="/assets/images/blue-ibex.jpeg" alt="Blue ibex enlarged" style="max-width:92vw; max-height:92vh; display:block;" />
  </div>
</dialog>

<script>
  (function () {
    const preview = document.getElementById("blue-ibex-preview");
    const dialog = document.getElementById("blue-ibex-lightbox");
    if (!preview || !dialog || typeof dialog.showModal !== "function") return;

    const openDialog = () => dialog.showModal();
    const closeDialog = () => dialog.close();

    preview.addEventListener("click", openDialog);
    preview.addEventListener("keydown", (event) => {
      if (event.key === "Enter") openDialog();
    });

    dialog.addEventListener("click", (event) => {
      if (event.target === dialog) closeDialog();
    });

    dialog.addEventListener("keydown", (event) => {
      if (event.key === "Escape" || event.key === "Enter") closeDialog();
    });
  })();
</script>]]></content><author><name>Shachar Mirkin</name></author><category term="ai" /><category term="llm" /><category term="vision" /><category term="vlm" /><category term="prompting" /><category term="capabilities" /><category term="evaluation" /><summary type="html"><![CDATA[My anecdotal vision test, and a lesson about triggering the right capabilities]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/ibex.jpeg" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/ibex.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Grenoble Data Science meetup</title><link href="https://shacharmirkin.github.io/2026/04/19/grenoble-data-science-meetup/" rel="alternate" type="text/html" title="Grenoble Data Science meetup" /><published>2026-04-19T07:00:00+00:00</published><updated>2026-04-19T07:00:00+00:00</updated><id>https://shacharmirkin.github.io/2026/04/19/grenoble-data-science-meetup</id><content type="html" xml:base="https://shacharmirkin.github.io/2026/04/19/grenoble-data-science-meetup/"><![CDATA[<p>I am part of the organizing team for the Grenoble Data Science meetup.
We typically meet once a month in Grenoble for a technical talk (in English) on data science, machine learning, or AI, followed by a social and technical discussion over food and drinks.</p>

<p>If you’d like to attend a talk, join the community, or learn more, check out <a href="https://sites.google.com/view/grenobledatascience/">our site</a> or join our <a href="https://www.linkedin.com/groups/15454046/">LinkedIn group</a>. <strong>If you’d like to present</strong>,  contact me or one of the other organizers.</p>]]></content><author><name>Shachar Mirkin</name></author><category term="Community" /><category term="Meetup" /><category term="Data Science" /><category term="Grenoble" /><summary type="html"><![CDATA[Join the Grenoble Data Science community]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/grenoble-data-science.jpg" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/grenoble-data-science.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Universal NER v2 paper</title><link href="https://shacharmirkin.github.io/2026/03/18/universal-ner-v2-lrec-2026/" rel="alternate" type="text/html" title="Universal NER v2 paper" /><published>2026-03-18T07:00:00+00:00</published><updated>2026-03-18T07:00:00+00:00</updated><id>https://shacharmirkin.github.io/2026/03/18/universal-ner-v2-lrec-2026</id><content type="html" xml:base="https://shacharmirkin.github.io/2026/03/18/universal-ner-v2-lrec-2026/"><![CDATA[<p>I’m happy to share that our <a href="https://arxiv.org/pdf/2604.12744">paper</a>, <strong>Universal NER v2</strong>, was accepted to <a href="https://lrec2026.info/">LREC 2026</a>.</p>

<p>In this paper we present Universal NER (UNER) v2, a substantial extension of the dataset introduced in 2024. UNER is a collaborative resource for multilingual named-entity annotation, designed to support cross-lingual NER research.</p>

<p>UNER v2 adds 11 datasets covering 10 typologically diverse languages, including several aligned evaluation benchmarks, while preserving consistent annotation guidelines and high inter-annotator agreement. We provide detailed dataset statistics and benchmark performance using both encoder-based models and LLMs.</p>

<p>We compared human annotation with LLM-based annotation under the same guidelines. Our results show that LLMs still lag behind human annotators,and analyze the typical mistakes they make. While performance could likely be improved through more elaborate instructions or via agentic workflows, LLMs are not yet dependable annotators. That said, they show promise not only for annotation, but also for identifying inconsistencies in human labels and weaknesses in the guidelines, which we plan to explore in future work.</p>

<p><em>Terra Blevins, Stephen Mayhew, Marek Suppa, Hila Gonen, Shachar Mirkin, Vasile Pais, Kaja Dobrovoljc, Voula Giouli, Jun Kevin, Enes Yılandiloğlu, Eugene Jang, Eungseo Kim, Jeongyeon Seo, Xenophon Gialis and Yuval Pinter. <a href="https://arxiv.org/pdf/2604.12744">Universal NER v2: Towards a Massively Multilingual Named Entity Recognition Benchmark</a>. LREC 2026</em>.</p>

<p><em>Last updated: April 19, 2026</em></p>]]></content><author><name>Shachar Mirkin</name></author><category term="NLP" /><category term="NER" /><category term="LREC" /><category term="Research" /><category term="Benchmarks" /><category term="Multilingual" /><summary type="html"><![CDATA[Universal NER v2 was accepted to LREC 2026.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/uner.png" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/uner.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">When LLMs See What We Don’t</title><link href="https://shacharmirkin.github.io/2026/03/13/llm-sees-something-else/" rel="alternate" type="text/html" title="When LLMs See What We Don’t" /><published>2026-03-13T08:00:00+00:00</published><updated>2026-03-13T08:00:00+00:00</updated><id>https://shacharmirkin.github.io/2026/03/13/llm-sees-something-else</id><content type="html" xml:base="https://shacharmirkin.github.io/2026/03/13/llm-sees-something-else/"><![CDATA[<p>This weekend we have municipal elections here 🇫🇷, so a couple of weeks ago I asked a model about the candidates in our town. I was aware of three candidates, but the model said that two of them had formed an alliance to better challenge the current mayor, and it even provided supporting links. It kind of made sense politically, but when I followed the links, I couldn’t find any of the supposed “proofs”.</p>

<p>I confronted the model about it, but nothing I said helped convince it.
I had to get to the bottom of it, so I kept going back every day to see if it could find new information to support its claim. It just doubled down, sending me more evidence I couldn’t see, along with “I understand your frustration”. 🙄</p>

<p>I even made up a conversation I supposedly had with one of the candidates where they denied the alliance, but it said that’s just what politicians do.</p>

<p>Eventually I checked the HTML source of one of the candidates’ websites, and there it was: the name of the other candidate, with hidden tags (specifically, text inside <code class="language-plaintext highlighter-rouge">&lt;span class="hide"&gt;</code> and a mention at the end of a long <code class="language-plaintext highlighter-rouge">&lt;title&gt;</code> tag, making the other candidate’s name invisible).</p>

<p>Just a good old SEO trick, no prompt injection intended.</p>

<p>The LLM took that and built an entire story about an alliance that never existed, and was completely convinced it was right.</p>

<p>Sometimes we need to remind ourselves that what LLMs see isn’t the same as what we do.</p>

<hr />
<div style="color: #666;">
<br />
  <ul>
    <li>We've all heard about prompt injection, where white text that includes LLM instructions and is invisible to humans is embedded in documents, but this is the first time I've encountered this kind of case.</li>
    <li>As far as I understand, the title-tag strategy is not ideal and may be penalized by Google Search due to signal incoherence.</li>
  </ul>
</div>]]></content><author><name>Shachar Mirkin</name></author><category term="LLMs" /><category term="AI" /><category term="Hallucinations" /><category term="Prompt Injection" /><summary type="html"><![CDATA[A local election story about how an LLM hallucinated a political alliance]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/llm-sees.jpg" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/llm-sees.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Flat-fabricated Inflatables</title><link href="https://shacharmirkin.github.io/2026/01/25/scf2025-mit-inflatables/" rel="alternate" type="text/html" title="Flat-fabricated Inflatables" /><published>2026-01-25T09:00:00+00:00</published><updated>2026-01-25T09:00:00+00:00</updated><id>https://shacharmirkin.github.io/2026/01/25/scf2025-mit-inflatables</id><content type="html" xml:base="https://shacharmirkin.github.io/2026/01/25/scf2025-mit-inflatables/"><![CDATA[<p>Today I’m just proudly sharing my son’s <a href="https://dl.acm.org/doi/10.1145/3745778.3766669">paper</a> presented at <a href="https://scf.acm.org/2025/">SCF2025</a> at MIT 😊</p>

<p><a href="https://ofirmirkin.github.io/">Ofir Mirkin</a> and his co-authors introduce a new type of flat-fabricated inflatable structures that we use to approximate the shapes of target developable surfaces. In other words, they program flat sheets so that when they’re inflated, they naturally morph into a desired 3D shape, like the deckchair in the image above.</p>

<p>This work was done in collaboration with Nathan Vani, Etienne Reyssat, José Bico, and Mélina Skouras.</p>]]></content><author><name>Shachar Mirkin</name></author><category term="Research" /><category term="Soft Robotics" /><category term="Fabrication" /><category term="Geometry" /><summary type="html"><![CDATA[Flat-fabricated inflatable structures for approximating developable surfaces.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/inflatable.jpeg" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/inflatable.jpeg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">vLLM on Google Colab</title><link href="https://shacharmirkin.github.io/2025/04/26/vllm-on-google-colab/" rel="alternate" type="text/html" title="vLLM on Google Colab" /><published>2025-04-26T10:00:00+00:00</published><updated>2025-04-26T10:00:00+00:00</updated><id>https://shacharmirkin.github.io/2025/04/26/vllm-on-google-colab</id><content type="html" xml:base="https://shacharmirkin.github.io/2025/04/26/vllm-on-google-colab/"><![CDATA[<h2 id="motivation">Motivation</h2>

<p><a href="https://github.com/vllm-project/vllm">vLLM</a> is a popular library for fast LLM serving.</p>

<p>I needed to test my code with vLLM but didn’t have access to the actual server.
I couldn’t run in locally with a GPU either (Apple Silicon is not yet supported), so I set up a vLLM server on Google Colab, and used <a href="https://www.litellm.ai/">LiteLLM</a> to access it from my computer</p>

<p>This <a href="https://gist.github.com/shacharmirkin/60d3403909ea5a540f7e17f2c3f2581a">gist</a> shows how it can be done.</p>]]></content><author><name>Shachar Mirkin</name></author><category term="vLLM" /><category term="LiteLLM" /><category term="LLMs" /><category term="Google Colab" /><summary type="html"><![CDATA[Running a vLLM server on Google Colab and accessing it externally]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/vllm-on-colab.png" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/vllm-on-colab.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Invalid Jupyter notebooks on GitHub</title><link href="https://shacharmirkin.github.io/2025/04/16/github-invalid-notbooks/" rel="alternate" type="text/html" title="Invalid Jupyter notebooks on GitHub" /><published>2025-04-16T10:00:00+00:00</published><updated>2025-04-16T10:00:00+00:00</updated><id>https://shacharmirkin.github.io/2025/04/16/github-invalid-notbooks</id><content type="html" xml:base="https://shacharmirkin.github.io/2025/04/16/github-invalid-notbooks/"><![CDATA[<h2 id="the-problem">The Problem</h2>

<p>When trying to view Jupyter notebooks on GitHub, we sometimes see the above ‘Invalid Notebook’ message.
This often happens with notebooks created in <em>Google Colab</em> as it structures notebook metadata differently than what GitHub’s renderer expects.</p>

<p>In this <a href="https://gist.github.com/shacharmirkin/7f608c51f5d1c159d5c5791081eb5c6d">gist</a> I describe different solutions (workarounds) for this issue, including a description of automating a fix as a pre-commit hook.</p>]]></content><author><name>Shachar Mirkin</name></author><category term="GitHub" /><category term="Jupyter" /><category term="Google Colab" /><summary type="html"><![CDATA[Workarounds for dealing with Invalid Notebook error on GitHub]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/github-invalid-notebook.png" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/github-invalid-notebook.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Shoebot</title><link href="https://shacharmirkin.github.io/2024/10/04/shobot/" rel="alternate" type="text/html" title="Shoebot" /><published>2024-10-04T10:00:00+00:00</published><updated>2024-10-04T10:00:00+00:00</updated><id>https://shacharmirkin.github.io/2024/10/04/shobot</id><content type="html" xml:base="https://shacharmirkin.github.io/2024/10/04/shobot/"><![CDATA[<p>We wanted to experiment with a low-budget mobile robot with machine-learning (ML) capabilities. We decided on a project in which the robot’s mission is to detect when someone enters the house wearing shoes, and respond accordingly, helping maintain a shoe-free space! The robot uses ML to distinguish between two categories: shoes (forbidden) and bare feet, socks, or slippers (allowed).</p>

<p>On this <a href="https://github.com/ofirmirkin/Shoebot/">Github repo</a> we describe in detail the project’s key components and the challenges we encountered along the way. The full code and a sample dataset are also available in our repo.</p>

<h3 id="contributors">Contributors</h3>

<p><a href="https://github.com/ofirmirkin">Ofir Mirkin</a>, Shachar Mirkin</p>]]></content><author><name>Shachar Mirkin</name></author><category term="Robotics" /><category term="Machine Learning" /><category term="Computer Vision" /><summary type="html"><![CDATA[Shoebot: a low-budget ML robotics project]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/shoebot.jpg" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/shoebot.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Vibe Coding a chess app</title><link href="https://shacharmirkin.github.io/2024/09/25/chess-openings/" rel="alternate" type="text/html" title="Vibe Coding a chess app" /><published>2024-09-25T10:00:00+00:00</published><updated>2024-09-25T10:00:00+00:00</updated><id>https://shacharmirkin.github.io/2024/09/25/chess-openings</id><content type="html" xml:base="https://shacharmirkin.github.io/2024/09/25/chess-openings/"><![CDATA[<p>When I saw that Lichess openings dataset was shared on Hugging Face, I thought I’d use AI to create an app within 45 minutes (like everyone else says they do) to help my daughter practice openings.</p>

<p>Since my front-end skills are quite limited, Cursor was crucial, but I ended up spending much more time than planned, frequently consulting various LLMs, fixing code myself and reverting changes quite often (lesson learned: when using such tools, commit all the time!)</p>

<p>The result is a little <a href="https://streamlit.io/">Streamlit</a> app for practicing chess openings, and my first project where AI wrote more code than I did.</p>

<p>You can try it <a href="https://huggingface.co/spaces/shachar/chess-openings">on Hugging Face</a> (completely free of course), or check out the code <a href="https://huggingface.co/spaces/shachar/chess-openings/tree/main">here</a>.</p>]]></content><author><name>Shachar Mirkin</name></author><category term="Vibe Coding" /><category term="Cursor" /><category term="Streamlit" /><category term="Chess" /><summary type="html"><![CDATA[Creating a little chess app using (almost) only Cursor]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://shacharmirkin.github.io/assets/images/chess-openings.jpg" /><media:content medium="image" url="https://shacharmirkin.github.io/assets/images/chess-openings.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>